bdb —デバッガフレームワーク
ソースコード: :source: `Lib / bdb.py`
bdb モジュールは、ブレークポイントの設定やデバッガーを介した実行の管理など、基本的なデバッガー機能を処理します。
次の例外が定義されています。
- exception bdb.BdbQuit
- デバッガーを終了するために Bdb クラスによって発生した例外。
bdb モジュールは、次の2つのクラスも定義します。
- class bdb.Breakpoint(self, file, line, temporary=0, cond=None, funcname=None)
このクラスは、一時的なブレークポイント、カウントの無視、無効化と(再)有効化、および条件を実装します。
ブレークポイントは、
bpbynumber
と呼ばれるリストを介して番号でインデックス付けされ、bplist
を介して(file, line)
ペアでインデックス付けされます。 前者は、クラス Breakpoint の単一インスタンスを指します。 後者は、1行に複数のブレークポイントが存在する可能性があるため、そのようなインスタンスのリストを指します。ブレークポイントを作成するとき、それに関連付けられたファイル名は標準形式である必要があります。 funcname が定義されている場合、その関数の最初の行が実行されるときにブレークポイントヒットがカウントされます。 条件付きブレークポイントは常にヒットをカウントします。
Breakpoint インスタンスには次のメソッドがあります。
- deleteMe()
ファイル/行に関連付けられているリストからブレークポイントを削除します。 それがその位置の最後のブレークポイントである場合、ファイル/行のエントリも削除します。
- enable()
ブレークポイントを有効としてマークします。
- disable()
ブレークポイントを無効としてマークします。
- bpformat()
ブレークポイントに関するすべての情報を適切にフォーマットされた文字列を返します。
ブレークポイント番号。
一時的かどうか。
そのファイル、行の位置。
休憩の原因となる状態。
次のN回無視する必要がある場合。
ブレークポイントのヒット数。
バージョン3.2の新機能。
- bpprint(out=None)
bpformat()の出力をファイル out に出力するか、
None
の場合は標準出力に出力します。
- class bdb.Bdb(skip=None)
Bdb クラスは、汎用のPythonデバッガー基本クラスとして機能します。
このクラスは、トレース機能の詳細を処理します。 派生クラスは、ユーザーの操作を実装する必要があります。 標準のデバッガークラス( pdb.Pdb )がその一例です。
skip 引数を指定する場合は、globスタイルのモジュール名パターンを反復可能にする必要があります。 デバッガーは、これらのパターンの1つに一致するモジュールで発生するフレームにステップインしません。 フレームが特定のモジュールで発生したと見なされるかどうかは、フレームグローバルの
__name__
によって決定されます。バージョン3.1の新機能: skip 引数。
Bdb の次のメソッドは、通常、オーバーライドする必要はありません。
- canonic(filename)
正規の形式でファイル名を取得するための補助的な方法。つまり、大文字と小文字を区別しないファイルシステムでは、大文字と小文字を区別しない絶対パスとして、周囲の山かっこを取り除きます。
- reset()
botframe
、stopframe
、returnframe
、およびquitting
属性に、デバッグを開始する準備ができた値を設定します。
- trace_dispatch(frame, event, arg)
この機能は、デバッグされたフレームのトレース機能としてインストールされます。 その戻り値は、新しいトレース関数(ほとんどの場合、つまりそれ自体)です。
デフォルトの実装は、実行されようとしているイベントのタイプ(文字列として渡される)に応じて、フレームをディスパッチする方法を決定します。 event は、次のいずれかになります。
"line"
:新しいコード行が実行されます。"call"
:関数が呼び出されようとしているか、別のコードブロックが入力されています。"return"
:関数または他のコードブロックが返されようとしています。"exception"
:例外が発生しました。"c_call"
:AC関数が呼び出されようとしています。"c_return"
:AC関数が返されました。"c_exception"
:AC関数で例外が発生しました。
Pythonイベントの場合、特殊な関数(以下を参照)が呼び出されます。 Cイベントの場合、アクションは実行されません。
arg パラメーターは、前のイベントに依存します。
トレース関数の詳細については、 sys.settrace()のドキュメントを参照してください。 コードおよびフレームオブジェクトの詳細については、標準タイプ階層を参照してください。
- dispatch_line(frame)
デバッガーが現在の行で停止する必要がある場合は、 user_line()メソッドを呼び出します(サブクラスでオーバーライドする必要があります)。
Bdb.quitting
フラグが設定されている場合( user_line()から設定可能)、 BdbQuit 例外を発生させます。 trace_dispatch()メソッドへの参照を返し、そのスコープでさらにトレースします。
- dispatch_call(frame, arg)
デバッガーがこの関数呼び出しで停止する必要がある場合は、 user_call()メソッドを呼び出します(サブクラスでオーバーライドする必要があります)。
Bdb.quitting
フラグが設定されている場合( user_call()から設定可能)、 BdbQuit 例外を発生させます。 trace_dispatch()メソッドへの参照を返し、そのスコープでさらにトレースします。
- dispatch_return(frame, arg)
デバッガーがこの関数の戻りで停止する必要がある場合は、 user_return()メソッドを呼び出します(これはサブクラスでオーバーライドする必要があります)。
Bdb.quitting
フラグが設定されている場合( user_return()から設定可能)、 BdbQuit 例外を発生させます。 trace_dispatch()メソッドへの参照を返し、そのスコープでさらにトレースします。
- dispatch_exception(frame, arg)
デバッガーがこの例外で停止する必要がある場合は、 user_exception()メソッドを呼び出します(サブクラスでオーバーライドする必要があります)。
Bdb.quitting
フラグが設定されている場合( user_exception()から設定可能)、 BdbQuit 例外を発生させます。 trace_dispatch()メソッドへの参照を返し、そのスコープでさらにトレースします。
通常、派生クラスは次のメソッドをオーバーライドしませんが、停止とブレークポイントの定義を再定義したい場合はオーバーライドできます。
- stop_here(frame)
このメソッドは、 frame がコールスタックの
botframe
より下にあるかどうかをチェックします。botframe
は、デバッグが開始されたフレームです。
- break_here(frame)
このメソッドは、 frame に属するファイル名と行、または少なくとも現在の関数にブレークポイントがあるかどうかを確認します。 ブレークポイントが一時的なものである場合、このメソッドはブレークポイントを削除します。
- break_anywhere(frame)
このメソッドは、現在のフレームのファイル名にブレークポイントがあるかどうかをチェックします。
派生クラスは、デバッガーの操作を制御するために、これらのメソッドをオーバーライドする必要があります。
- user_call(frame, argument_list)
このメソッドは、呼び出された関数内のどこかでブレークが必要になる可能性がある場合に、 dispatch_call()から呼び出されます。
- user_line(frame)
このメソッドは、 stop_here()または break_here()のいずれかが
True
を生成するときに、 dispatch_line()から呼び出されます。
- user_return(frame, return_value)
このメソッドは、 stop_here()が
True
を生成するときに、 dispatch_return()から呼び出されます。
- user_exception(frame, exc_info)
このメソッドは、 stop_here()が
True
を生成するときに、 dispatch_exception()から呼び出されます。
- do_clear(arg)
ブレークポイントが一時的なものである場合に、ブレークポイントを削除する方法を処理します。
このメソッドは、派生クラスによって実装する必要があります。
派生クラスとクライアントは、次のメソッドを呼び出してステッピング状態に影響を与えることができます。
- set_step()
1行のコードの後で停止します。
- set_next(frame)
指定されたフレーム内またはその下の次の行で停止します。
- set_return(frame)
指定されたフレームから戻るときに停止します。
- set_until(frame)
現在のライン以下のラインに到達したとき、または現在のフレームから戻ったときに停止します。
- set_trace([frame])
フレームからデバッグを開始します。 frame が指定されていない場合、デバッグは呼び出し元のフレームから開始されます。
- set_continue()
ブレークポイントまたは終了時にのみ停止します。 ブレークポイントがない場合は、システムトレース機能を
None
に設定してください。
- set_quit()
quitting
属性をTrue
に設定します。 これにより、dispatch_*()
メソッドの1つへの次の呼び出しで BdbQuit が発生します。
派生クラスとクライアントは、次のメソッドを呼び出してブレークポイントを操作できます。 これらのメソッドは、問題が発生した場合はエラーメッセージを含む文字列を返し、問題がない場合は
None
を返します。- set_break(filename, lineno, temporary=0, cond, funcname)
新しいブレークポイントを設定します。 引数として渡されたファイル名の lineno 行が存在しない場合は、エラーメッセージを返します。 ファイル名は、 canonic()メソッドで説明されているように、標準形式である必要があります。
- clear_break(filename, lineno)
filename および lineno のブレークポイントを削除します。 何も設定されていない場合は、エラーメッセージが返されます。
- clear_bpbynumber(arg)
Breakpoint.bpbynumber
のインデックス arg を持つブレークポイントを削除します。 arg が数値でないか範囲外の場合は、エラーメッセージを返します。
- clear_all_file_breaks(filename)
ファイル名のすべてのブレークポイントを削除します。 何も設定されていない場合は、エラーメッセージが返されます。
- clear_all_breaks()
既存のブレークポイントをすべて削除します。
- get_bpbynumber(arg)
指定された番号で指定されたブレークポイントを返します。 arg が文字列の場合、数値に変換されます。 arg が数値以外の文字列である場合、指定されたブレークポイントが存在しなかったか、削除されていないと、 ValueError が発生します。
バージョン3.2の新機能。
- get_break(filename, lineno)
ファイル名の lineno にブレークポイントがあるかどうかを確認します。
- get_breaks(filename, lineno)
filename の lineno のすべてのブレークポイントを返すか、何も設定されていない場合は空のリストを返します。
- get_file_breaks(filename)
filename 内のすべてのブレークポイントを返すか、何も設定されていない場合は空のリストを返します。
- get_all_breaks()
設定されているすべてのブレークポイントを返します。
派生クラスとクライアントは、次のメソッドを呼び出して、スタックトレースを表すデータ構造を取得できます。
- get_stack(f, t)
フレームとすべての上位(呼び出し)および下位フレームのレコードのリスト、および上位部分のサイズを取得します。
- format_stack_entry(frame_lineno, lprefix=': ')
(frame, lineno)
タプルで識別される、スタックエントリに関する情報を含む文字列を返します。フレームを含むファイル名の正規形。
関数名、または
"<lambda>"
。入力引数。
戻り値。
コード行(存在する場合)。
次の2つのメソッドをクライアントが呼び出して、デバッガーを使用して、文字列として指定されたステートメントをデバッグできます。
- run(cmd, globals=None, locals=None)
exec()関数を介して実行されたステートメントをデバッグします。 globals のデフォルトは
__main__.__dict__
、 locals のデフォルトは globals です。
- runctx(cmd, globals, locals)
下位互換性のため。 run()メソッドを呼び出します。
- runcall(func, /, *args, **kwds)
単一の関数呼び出しをデバッグし、その結果を返します。
最後に、モジュールは次の関数を定義します。
- bdb.checkfuncname(b, frame)
ブレークポイント b の設定方法に応じて、ここでブレークする必要があるかどうかを確認します。
行番号で設定されている場合は、
b.line
が引数として渡されたフレーム内のものと同じかどうかをチェックします。 ブレークポイントが関数名で設定されている場合は、正しいフレーム(正しい関数)にいることと、最初の実行可能行にあることを確認する必要があります。
- bdb.effective(file, line, frame)
- このコード行に有効な(アクティブな)ブレークポイントがあるかどうかを判別します。 ブレークポイントのタプルと、一時的なブレークポイントを削除してもよいかどうかを示すブール値を返します。 一致するブレークポイントがない場合は、
(None, None)
を返します。
- bdb.set_trace()
- 呼び出し元のフレームから Bdb インスタンスを使用してデバッグを開始します。