トップページ | Python 標準ドキュメント | 事例集 | アーティクル | リンク集 | ダウンロード | サイトマップ 
468x60サイズバナー・シリーズC Simple Fun and Indented
コンテンツ
Sorting Mini-HOWTO (和訳) - 組込みメソッド sort() を使ったソート方法を、いくつ...
pdb の使い方 -- 導入編 - デバッガの簡易な使い方です。
pdb の使い方 -- コマンド編 - デバッガコマンドのリファレンスです。
どこでもPython - 「フツーのISPでPythonが動かせる」mxCGIPyt...
正規表現 HOWTO - HOWTO プロジェクトから正規表現のチュートリアルを和訳...
py2exe (Windows 実行形式に変換) - Python スクリプトからスタンドアロンのWindows...
イテレータを使おう - Iterator/Generatorの基礎を簡単に解説して...
アーティクル
 
Python Powered
Powered by Zope
PyJUG網元衆










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 デバッグと比べて、デバッグ時のバグ発見率が格段に上がるといわれています。 積極的にデバッガを使ってデバッグするようにしましょう。

コマンド編に続きます。


印刷用ページ
Copyright © 2001-2009 Python Japan User's Group.

警告当サイトの文書・画像等のコンテンツの著作権は、各コンテンツの作成者、もしくは日本Pythonユーザ会に帰属します。
 また、日本Pythonユーザ会はサイト内のコンテンツに他のプログラミング言語からの乗り換えを誘発する恐れのある表現が多々あることを認め、予めお詫び申し上げます。