MayaとVisualStudioとデバッグ入門
2011/6/13
Tag: bug,debug,maya,plugin,VisualStudio
お久しぶりです。
開発室の齊藤 弘です。
じみ~な内容をお届けした前回ですが、今回は
VisualStudio使ってMayaのプラグイン開発した場合のデバッグ方法の紹介です。
またじみ~な内容です。
* 今回記事で使用しているプラグインは、Mayaに付属するdevkitに入っているhelloWorldCmdを使用します。
( Mayaがインストールされている場合、”Mayaインストールディレクトリ\devkit\plug-ins”に、helloWorldCmd.vcproj, helloWorldCmd.sln, helloWorldCmd.cppが存在します。コンパイルは各自でお願いします。)
■ デバッグ
判明したバグの場所を見つけ修正する作業、”デバッグ”。
どうやってバグ場所を見つけるか?
バグ場所を見つける手法で手軽(?)かつ古典的と言えば
・ デバッグ・プリント
printfやcoutなどを使い、プログラムを実行して変数の情報を出力する方法。
手軽ではあるが、バグ場所の検討がついていない場合、どの場所の情報を出力するのか迷うこともしばしば。
迷ったあげくに出力命令たくさん書いちゃう。
結果デバッグの手間が大幅にかかり、やってられない!…っとなることも。
そこで便利なデバッグ方法はないかと登場するのが
・ブレークポイントを用いたデバッグ
プログラムを中断する場所(ブレークポイント)を設定し、
実行中のプログラムをブレークポイントの場所で中断させてデバックする方法。
中断させることで、中断した時点での変数情報を出力命令を書かずに見ることができます。
また”中断”というように、プログラムを終了させているわけではないので、
次に実行される命令を1行ずつ実行させて、挙動を確認したり、
“再開”させてまた中断したりと、実行を操作しながらデバックを行なうことが可能です。
ではMayaプラグイン開発の場合どうやってブレークポイントを設定して、デバッグするのか?
■ プロセスにアタッチ
Mayaのプラグイン開発におけるデバッグで重要なのが実行中のプロセスにアタッチする機能
どうやるか?
- Maya起動
- VisualStudioで、デバッグ -> プロセスにアタッチ を選択
- ウィンドウのプロセス名から”maya.exe”を選択し、”アタッチ”ボタンを押す
これで実行中のMayaでデバッグする状態が整います。
やってみる
helloWorldCmdを使ってやってみましょう。
VisualStudioで、”helloWorld”を出力する行の左 (下画像赤枠部分)
をクリックし、ブレークポイント設定します。 赤丸がブレークポイントです。
Mayaを起動し
Visual Studioに戻り、プロセスにアタッチから、Mayaのプロセスを選択しアタッチ
MayaでhelloWorldCmdプラグインをロードし、helloWorldを実行します。
実行後、Visual Studioに画面になりブレークポイントで止まります。
デバッグ作業をはじめます。
プロジェクト設定
デバッグの度に、アタッチするプログラムをプロセス一覧から選択するのは面倒です。
デバッグ開始と共にプロセスアタッチするように、プロジェクトの設定を変更します。
- プロジェクト右クリック -> プロパティ
- 構成プロパティ -> デバッグ
- 設定を以下にします。
・ コマンド : デバッグに使うMayaのmaya.exeのフルパス
(mayaインストールディレクトリ/bin/maya.exe)
・アタッチ : はい
こうすることで、Mayaが起動していれば”デバッグ開始”を押すと共に
起動しているMayaにアタッチされ、デバッグが開始します。
* もし開始しない場合、Mayaを再起動してみてください。
■ デバッグと操作
プログラムをブレークポイントで中断させた後、よく使う操作を紹介します。
その前に、helloWorldCmdプラグインのdoIt関数の内容を
MStatus helloWorld::doIt( const MArgList& ) { for(int i = 0; i < 3; i++) { cout<<"count: "<< i << endl; } return MS::kSuccess; }
に書き換えます。
では、for文の行にブレークポイントを設定し 操作を見ていきます。
次に実行される行の表示
操作の紹介にはいる前に知っておくべき表示が
次に実行される行は、黄色い矢印で表されているということです。
ステップイン・ステップアウト・ステップオーバー
操作でまず使うのがステップイン、アウト、オーバー。
・ ステップイン : 1行ずつ次の命令(黄色の矢印が示す行) を実行する場合
・ ステップアウト : 呼出された関数の中から途中で抜け出し呼び出し場所に戻る
・ ステップオーバー : 呼出される関数を実行後、次の命令まで移動
ブレークポイントオプション
ブレークポイントはいろいろな設定項目があり
ブレークポイントのマークを右クリックしてみるとオプションが表示されます。
例えば、毎回ブレークポイントで止めるのではなく、ある条件で止めるというのも
ここから設定が可能です。
例えばヒットカウント。 これはブレークポイントの場所の 呼出回数を条件とする場合に使います。
ヒットカウント例
for文の行にブレークポイントを設定し
ブレークポイントのオプションからヒットカウントを選び
“ヒットカウント数が次の数と等しいときに中断”
数値を2
と設定しデバッグした場合、”helloWorld”コマンドを2回実行したときに中断します。
データチップとビジュアライザ
中断しているときに、変数の上にカーソルを合わせると
データチップが表示され、その変数が現在持つ情報が表示されます。
現在の変数を一覧で確認する場合はビジュアライザを用います。
デバッグ -> ウィンドウ -> 自動変数
デバッグ -> ウィンドウ -> ローカル
次に実行される行を変更する
黄色い矢印はマウスで動かし、次に実行される行を変更することが可能です。
例えば下の画像にある黄色の矢印をfor文の行に持って行くと、
for文は最初から実行されます。 現在、変数iの値は2です。
戻してfor文から再度実行したため、変数iの値は0になっています。
■ まとめ
VisualStudioを用いたMayaのデバッグについて
紹介してみましたが、どうだったでしょうか?
VisualStudioには他にも色々な機能があります。
知らない機能がたくさんあるのはまるで、Mayaのよう。
いろいろ使ってみましょう。
ではまた。
コメント
コメントフォーム