SuiTechLog

Unity,Arduino,RaspberryPiなど、モノづくり系を気ままに書き残すブログ。

Maya Python print デバッグよりも楽なpdbデバッグ


Pythonデバッグ

普通のPythonでも使える技です。(標準機能です。)

Pythonデバッグするときは割とprintで値を表示したりすると思いますが

以下の方法がかなり楽でした。

import pdb; pdb.set_trace()

 

 

これを、処理の途中にいれておくとそこで処理が止まり、デバッグができるようになります。そう、よくVisualStudioなどでもできるアレです。

f:id:sui332015:20180315200721p:plain

 Mayaの場合上のような新しいPython標準入力ウィンドウがでてきてそこにコマンドをいれることで

ステップイン(1行実行して一時停止。関数があった場合はその中に入ってさらに実行。)

ステップオーバー(1行実行して一時停止。そこに関数があった場合中に入らず、その関数を実行して次の行へ)

ステップアウト(今の関数の処理が終わるまで処理をすすめて一時停止)

その時の変数の値を表示などをすることもできます。とても便利。

 

ステップ実行について用語参考:

その1 デバッグの超基本「ステップ実行」

 

デバッグコマンド

 

sまたはstep : ステップイン

nまたはnext : ステップオーバー

rまたはreturn : ステップアウト

aまたはarg : 今の関数の引数一覧を表示

p : いわゆるプリント。引数に変数をいれると値を表示。

l またはlist: 前後のソースコードを表示(ただし、これはスクリプトエディタ上では無効のようです。ちゃんとpyファイルをimportして外部から呼び出している場合には有効でした。)

cまたはcontinue : 次のブレイクポイントまで一気に進めます。

qまたはquit : 処理を中断して終了。

hまたはhelp : コマンドの一覧を表示。引数にコマンド名をいれるとそのコマンドの説明が返る。

 

実行例:

簡単な例です

selobjs = None

import pdb; pdb.set_trace()

selobjs = (cmds.ls(sl=True))

 

これを実行すると自動的にselobjs=Noneを実行した次の行で止まります。

ここで、

p selobjsをいれると、Noneが返ってきます。(当然ですね)

次にsを入力しつぎの行へ。

ここで、p selobjsを入力すると、現在の「選択オブジェクトのリスト」がスクリプトエディタのログに表示されます。

さらにp type(sellobjs)で

<type 'list'>

と表示され、これがリストであることがわかります。

 

最後はcでデバッグを抜け、終了します。

 

よりこまかな詳細は以下。

26.2. pdb — Python デバッガ — Python 2.7.14 ドキュメント

 

参考:

racchai.hatenablog.com