| トップページ | Python 標準ドキュメント | 事例集 | アーティクル | リンク集 | ダウンロード | サイトマップ | |
![]() |
![]() |
|
pdb の使い方 -- 導入編pdb とはここでは、pdb の簡単な使い方を示します。 pdb とは、Python 付属のデバッガのことです。 デバッガといっても IDE (統合開発環境) についてくるようなグラフィカルなものではなく、コマンドラインベースのものです。 ですが、ある程度大きいプログラムを開発する人にとって、デバッガは必須といっても過言ではないでしょう。 pdb の使い方pdb は、他のライブラリと同じく、モジュールとして提供されています。 したがって、まずは pdb モジュールをインポートする必要があります。 >>> import pdb 実際にデバッグするときは、pdb.run( 文字列 ) と呼び出します。 引数の文字列は、関数呼び出しなどの実行文です。 また、pdb.runcall(callableobject[, argument[, argument ...]]) と、呼び出し可能オブジェクト (関数、クラス、メソッドなど) と引数を渡してデバッグすることもできます。
>>> import mymodule
>>> pdb.run('mymodule.test()')
> <string>(0)?()
(Pdb)
pdb モジュール自体に他のモジュールを渡してデバッグさせたり、(直前に) クラッシュしたプログラムをデバッグすることもできます。 $ python /usr/local/lib/python2.1/pdb.py myscript.py
>>> import mymodule
>>> mymodule.test()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "./mymodule.py", line 4, in test
test2()
File "./mymodule.py", line 3, in test2
print spam
NameError: spam
>>> pdb.pm()
> ./mymodule.py(3)test2()
-> print spam
(Pdb)
pdb コマンドpdb プロンプト ('(Pdb) ') には、デバッガ専用のコマンドを入力することができます。 そのうち主要なものを紹介します。 まず、デバッガを終了するには 'q(uit)' です。 これは 'q' または 'quit' と入力する、という意味です。 他の省略形、例えば 'Q' や 'qu' などではだめです。 'b(reak) 行数|関数名' はブレークポイントを設定します。 行数も関数名も書かなければ、全ブレークポイントを一覧表示します。 一時的なブレークポイントを設定する 'tbreak' もあります。 'cl(ear) ブレークポイント番号' でブレークポイントを削除します。 ブレークポイント番号を書かなければ全ブレークポイントを削除するので注意して使用してください。 's(tep)' は、一行実行して停止します。 'n(ext)' も同じく一行実行して停止しますが、実行した文が関数を呼んだ場合、前者は呼ばれた関数内で停止するという違いがあります。 現在の関数がリターンするまで実行する 'r(eturn)' や、ブレークポイントに出会うまで実行する 'c(ont(inue))' もあります。 'l(ist)' は、ソースコードの現在行の周りを表示します。 'p 式' は、式の値を表示します。 現在の変数の内容を確かめたりするのに便利です。 '!' に続けて普通の Python 文を書くこともできます。 それは、あたかも現在行で実行されたかのように振る舞います。 つまり、デバッグ中のプログラムの変数の値を直接変更したり、メソッドを呼んだりもできるということです。 まとめpdb の使い方の、簡単な部分だけの紹介でしたが、これだけでもひととおりのデバッグはできてしまいます。 pdb に限った話ではありませんが、デバッガを使うと、いわゆる printf デバッグと比べて、デバッグ時のバグ発見率が格段に上がるといわれています。 積極的にデバッガを使ってデバッグするようにしましょう。 コマンド編に続きます。 |
|
|
|
|
|
また、日本Pythonユーザ会はサイト内のコンテンツに他のプログラミング言語からの乗り換えを誘発する恐れのある表現が多々あることを認め、予めお詫び申し上げます。 |