"pdb" --- Python デバッガ
*************************

**ソースコード:** Lib/pdb.py

======================================================================

"pdb" モジュールは Python プログラム用の対話型ソースコードデバッガを定
義しています。 条件付きブレークポイントの設定、ソース行単位でのステッ
プ実行、スタックフレームの調査、ソースコードの表示、任意のスタックフレ
ームのコンテキストでの任意の Python コードの評価をサポートします。 事
後デバッグもサポートし、プログラムから呼び出すこともできます。

デバッガーは拡張可能です -- 実際にはクラス "Pdb" として定義されていま
す。現在これについてのドキュメントはありませんが、ソースを読めば簡単に
理解できます。拡張インターフェースはモジュール "bdb" と "cmd" を使って
います。

参考:

  "faulthandler" モジュール
     明示的な呼び出し、障害の発生、タイムアウト、ユーザーシグナルの受
     信に応じて、Python のトレースバックをダンプします。

  "traceback" モジュール
     Python プログラムのスタックトレースを抽出・整形・表示する標準イン
     ターフェース。

デバッガに入る典型的な方法は、次のコードを挿入することです。

   import pdb; pdb.set_trace()

もしくは:

   breakpoint()

これをデバッガに入りたい位置に挿入し、プログラムを実行します。 この文
の後に続くコードをステップ実行したり、"continue" コマンドでデバッガを
使わずに実行を続けたりできます。

バージョン 3.7 で変更: 組み込み関数 "breakpoint()" をデフォルトの引数
で呼び出すと、"import pdb; pdb.set_trace()" の代わりとして使えます。

   def double(x):
      breakpoint()
      return x * 2
   val = 3
   print(f"{val} * 2 is {double(val)}")

デバッガのプロンプトは "(Pdb)" で、デバッグモードに入っていることを示
します。

   > ...(2)double()
   -> breakpoint()
   (Pdb) p x
   3
   (Pdb) continue
   3 * 2 is 6

バージョン 3.3 で変更: "readline" モジュールによるコマンドおよびコマン
ド引数のタブ補完が利用できます。たとえば、"p" コマンドの引数では現在の
グローバルおよびローカル名が候補として表示されます。


コマンドライン・インターフェース
================================

コマンドラインから "pdb" を呼び出して他のスクリプトをデバッグすること
もできます。 例えば、次のようにします。

   python -m pdb [-c command] (-m module | -p pid | pyfile) [args ...]

モジュールとして pdb を起動すると、デバッグ中のプログラムが異常終了し
たときに pdb が自動的に事後デバッグモードに入ります。事後デバッグ後 (
またはプログラムの正常終了後)、pdb はプログラムを再起動します。自動再
起動を行った場合、pdb の状態 (ブレークポイントなど) はそのまま維持され
るので、たいていの場合、プログラム終了時にデバッガーも終了させるよりも
便利なはずです。

-c, --command <command>

   ".pdbrc" ファイルで指定したかのようにコマンドを実行します。 デバッ
   ガコマンド を参照してください。

   バージョン 3.2 で変更: "-c" オプションが追加されました。

-m <module>

   "python -m" と同様の方法でモジュールを実行します。 スクリプトの場合
   と同様に、デバッガはモジュールの最初の行の直前で実行を一時停止しま
   す。

   バージョン 3.7 で変更: "-m" オプションが追加されました。

-p, --pid <pid>

   指定された PID のプロセスにアタッチします。

   Added in version 3.14.

実行中の Python プロセスにアタッチしてリモートデバッグするには、"-p"
または "--pid" オプションで対象プロセスの PID を指定します。

   python -m pdb -p 1234

注釈:

  システムコールでブロックしているか、入出力を待っているプロセスへのア
  タッチは、次のバイトコード命令が実行されるか、プロセスがシグナルを受
  け取るまで有効になりません。

デバッガの制御下で文を実行する典型的な使い方は次のとおりです。

   >>> import pdb
   >>> def f(x):
   ...     print(1 / x)
   >>> pdb.run("f(2)")
   > <string>(1)<module>()
   (Pdb) continue
   0.5
   >>>

クラッシュしたプログラムを調べるための典型的な使い方は以下のようになり
ます:

   >>> import pdb
   >>> def f(x):
   ...     print(1 / x)
   ...
   >>> f(0)
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "<stdin>", line 2, in f
   ZeroDivisionError: division by zero
   >>> pdb.pm()
   > <stdin>(2)f()
   (Pdb) p x
   0
   (Pdb)

バージョン 3.13 で変更: **PEP 667** の実装により、*最適化されたスコー
プ* 内での実行中であっても、"pdb" から名前に代入すると、実行中のスコー
プに直ちに反映されるようになりました。

このモジュールは以下の関数を定義しています。それぞれが少しづつ違った方
法でデバッガに入ります:

pdb.run(statement, globals=None, locals=None)

   デバッガーに制御された状態で (文字列またはコードオブジェクトとして
   与えられた) *statement* を実行します。あらゆるコードが実行される前
   にデバッガープロンプトが現れます。ブレークポイントを設定し、
   "continue" とタイプできます。あるいは、文を "step" や "next" を使っ
   て一つづつ実行することができます (これらのコマンドはすべて下で説明
   します)。オプションの *globals* と *locals* 引数はコードを実行する
   環境を指定します。デフォルトでは、モジュール "__main__" の辞書が使
   われます。(組み込み関数 "exec()" または "eval()" の説明を参照してく
   ださい。)

pdb.runeval(expression, globals=None, locals=None)

   デバッガーに制御された状態で (文字列またはコードオブジェクトとして
   与えられる) *expression* を評価します。"runeval()" から復帰するとき
   、式の値を返します。その他の点では、この関数は "run()" と同様です。

pdb.runcall(function, *args, **kwds)

   *function* (関数またはメソッドオブジェクト、文字列ではありません)
   を与えられた引数とともに呼び出します。 "runcall()" から復帰するとき
   、関数呼び出しが返したものはなんでも返します。関数に入るとすぐにデ
   バッガプロンプトが現れます。

pdb.set_trace(*, header=None, commands=None)

   呼び出し元のスタックフレームでデバッガに入ります。 コードがデバッグ
   中でなくても、例えばアサーションが失敗したときなど、プログラム内の
   特定の位置にブレークポイントを埋め込むのに便利です。 *header* を指
   定すると、デバッグ開始の直前にコンソールに表示します。 *commands*
   引数を指定する場合は、デバッガの開始時に実行するコマンドのリストで
   す。

   バージョン 3.7 で変更: *header* キーワード専用引数。

   バージョン 3.13 で変更: "set_trace()" は、次に実行されるコードの行
   を待たずに、直ちにデバッガに入るようになりました。

   Added in version 3.14: *commands* 引数。

awaitable pdb.set_trace_async(*, header=None, commands=None)

   "set_trace()" の非同期版です。 非同期関数内で "await" を付けて使っ
   てください。

      async def f():
          await pdb.set_trace_async()

   この関数でデバッガを起動した場合は "await" 文を使えます。

   Added in version 3.14.

pdb.post_mortem(t=None)

   指定された例外または トレースバックオブジェクト の事後デバッグに入
   ります。 値を指定しない場合は現在処理中の例外を使い、処理中の例外が
   なければ "ValueError" を送出します。

   バージョン 3.13 で変更: 例外オブジェクトのサポートが追加されました
   。

pdb.pm()

   "sys.last_exc" にある例外の事後デバッグに入ります。

pdb.set_default_backend(backend)

   pdb は "'settrace'" と "'monitoring'" の 2 つのバックエンドをサポー
   トしています。 詳しくは "bdb.Bdb" を参照してください。 "Pdb" のイン
   スタンス化時にバックエンドを指定しなかった場合に使う、デフォルトの
   バックエンドを設定できます。 バックエンドの指定がなければ、デフォル
   トは "'settrace'" です。

   注釈:

     "breakpoint()" と "set_trace()" はこの関数の影響を受けません。 こ
     れらは常に "'monitoring'" バックエンドを使います。

   Added in version 3.14.

pdb.get_default_backend()

   pdb のデフォルトのバックエンドを返します。

   Added in version 3.14.

"run*" 関数と "set_trace()" は、 "Pdb" クラスをインスタンス化して同名
のメソッドを実行することのエイリアス関数です。それ以上の機能を利用した
い場合は、インスタンス化を自分で行わなければなりません:

class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False, readrc=True, mode=None, backend=None, colorize=False)

   "Pdb" はデバッガクラスです。

   *completekey*, *stdin*, *stdout* 引数は、基底にある "cmd.Cmd" クラ
   スに渡されます。そちらの解説を参照してください。

   *skip* 引数が指定された場合、 glob スタイルのモジュール名パターンの
   iterable (イテレート可能オブジェクト) でなければなりません。デバッ
   ガはこのパターンのどれかにマッチするモジュールに属するフレームには
   ステップインしません。 [1]

   デフォルトでは、Pdb は "continue" コマンドが投入されると、(ユーザー
   がコンソールから "Ctrl"-"C" を押したときに送られる) SIGINT シグナル
   用ハンドラーを設定します。これにより "Ctrl"-"C" を押すことで再度デ
   バッガーを起動することができます。Pdb に SIGINT ハンドラーを変更さ
   せたくない場合は *nosigint* を true に設定してください。

   *readrc* 引数はデフォルトでは真で、 Pdb が .pdbrc ファイルをファイ
   ルシステムから読み込むかどうかを制御します。

   *mode* 引数はデバッガを起動した方法を指定します。 一部のデバッガコ
   マンドの動作に影響します。 有効な値は、"'inline'" (組み込み関数
   breakpoint() が使用)、"'cli'" (コマンドラインからの起動が使用)、
   "None" (*mode* 引数の追加前と互換性のある動作) です。

   *backend* 引数はデバッガに使うバックエンドを指定します。 "None" を
   渡すとデフォルトのバックエンドを使います。 "set_default_backend()"
   を参照してください。 それ以外でサポートされるバックエンドは
   "'settrace'" と "'monitoring'" です。

   *colorize* 引数を "True" に設定すると、色をサポートしている環境では
   デバッガの出力を色付きにします。 pdb に表示されるソースコードが強調
   表示されます。

   *skip* を使ってトレースする呼び出しの例:

      import pdb; pdb.Pdb(skip=['django.*']).set_trace()

   引数無しで 監査イベント "pdb.Pdb" を送出します。

   バージョン 3.1 で変更: *skip* パラメータが追加されました。

   バージョン 3.2 で変更: *nosigint* パラメータが追加されました。 以前
   は Pdb が SIGINT ハンドラを設定することはありませんでした。

   バージョン 3.6 で変更: *readrc* 引数。

   Added in version 3.14: *mode* 引数が追加されました。

   Added in version 3.14: *backend* 引数が追加されました。

   Added in version 3.14: *colorize* 引数が追加されました。

   バージョン 3.14 で変更: "breakpoint()" や "pdb.set_trace()" のよう
   なインラインのブレークポイントは、*skip* パターンがあっても無視し、
   常に呼び出し元のフレームでプログラムを停止します。

   run(statement, globals=None, locals=None)
   runeval(expression, globals=None, locals=None)
   runcall(function, *args, **kwds)
   set_trace()

      前述のこれら関数のドキュメントを参照してください。


デバッガコマンド
================

デバッガーに認識されるコマンドは以下に一覧されています。たいていのコマ
ンドは以下のように 1、2 文字に省略できます。例えば "h(elp)" は "h" か
"help" がで help コマンドを呼び出すことを意味します (ただし "he",
"hel", "H", "Help", "HELP" は使用できません)。コマンドの引数はホワイト
スペース (スペースかタブ) で区切ってください。コマンド構文として任意の
引数は大括弧 ("[]") で括られています (実際に大括弧はタイプしないでくだ
さい)。いくつかから選択できる引数は縦線 ("|") で分割されて記述されてい
ます。

空行を入力すると入力された直前のコマンドを繰り返します。例外: 直前のコ
マンドが "list" コマンドならば、次の 11 行がリストされます。

デバッガが認識しないコマンドは Python 文とみなして、デバッグしているプ
ログラムのコンテキストおいて実行されます。先頭にに感嘆符 ("!") を付け
ることで Python 文であると明示することもできます。これはデバッグ中のプ
ログラムを調査する強力な方法です。変数を変更したり関数を呼び出したりす
ることも可能です。このような文で例外が発生した場合には例外名が出力され
ますが、デバッガの状態は変化しません。

バージョン 3.13 で変更: 先頭部分が pdb のコマンドと一致する式や文を、
正しく識別して実行できるようになりました。

デバッガは エイリアス をサポートしています。 エイリアスにはパラメータ
を持たせることができ、調査中のコンテキストにある程度合わせられます。

";;" で区切ると、1 行に複数のコマンドを入力できます。 単一の ";" は、
Python パーサーに渡す 1 行の中で複数のコマンドを区切るために使うので、
ここでは使いません。 コマンドの分割では構文を考慮せず、引用符で囲まれ
た文字列の途中であっても、最初の ";;" で入力を分割します。 セミコロン
が 2 つ連続する文字列を使うには、"';'';'" や "";"";"" のように暗黙の文
字列連結を使う方法があります。

一時的なグローバル変数を設定するには、*簡易変数 (convenience
variable)* を使います。 簡易変数は、名前が "$" で始まる変数です。 例え
ば、"$foo = 1" はデバッガのセッションで使えるグローバル変数 "$foo" を
設定します。 *簡易変数* はプログラムの実行を再開すると消去されるため、
"foo = 1" のような通常の変数を使う場合よりも、プログラムに干渉する可能
性が低くなります。

あらかじめ定義されている *簡易変数* は 4 つあります:

* "$_frame": 現在デバッグしているフレーム

* "$_retval": フレームが値を返す際の返り値

* "$_exception": フレームが例外を送出する際の例外

* "$_asynctask": pdb が非同期関数内で停止した場合の asyncio タスク

Added in version 3.12: *簡易変数* の機能が追加されました。

Added in version 3.14: 簡易変数 "$_asynctask" が追加されました。

ユーザーのホームディレクトリまたはカレントディレクトリに ".pdbrc" ファ
イルがある場合、"'utf-8'" エンコーディングで読み込み、デバッガのプロン
プトで入力したかのように実行します。 ただし、空行と "#" で始まる行は無
視します。 この機能は特にエイリアスに便利です。 両方のファイルがある場
合は、ホームディレクトリのファイルを先に読み込みます。 そこで定義され
たエイリアスは、カレントディレクトリのファイルで上書きできます。

バージョン 3.2 で変更: ".pdbrc" に "continue" や "next" のようなデバッ
グを続行するコマンドが使用できるようになりました。以前はこのようなコマ
ンドは無視されていました。

バージョン 3.11 で変更: ".pdbrc" を "'utf-8'" エンコーディングで読むよ
うになりました。 以前はシステムのロケールのエンコーディングで読んでい
ました。

h(elp) [command]

   引数を指定しない場合、利用できるコマンドの一覧が表示されます。引数
   として *command* が与えられた場合、そのコマンドのヘルプが表示されま
   す。"help pdb" で完全なドキュメント ("pdb" モジュールの doctring)
   が表示されます。*command* 引数は識別子でなければならないため、"!"
   コマンドのヘルプを表示するには "help exec" と入力します。

w(here) [count]

   最も新しいフレームが一番下になるようにスタックトレースを表示します
   。 *count* が 0 の場合は現在のフレームを表示します。 *count* が負の
   場合は最も古い方から -*count* 個のフレームを、正の場合は最も新しい
   方から *count* 個のフレームを表示します。 矢印 (">") が示す現在のフ
   レームが、ほとんどのコマンドのコンテキストを決定します。

   バージョン 3.14 で変更: *count* 引数が追加されました。

d(own) [count]

   スタックフレーム内で現在のフレームを *count* レベル (デフォルトは
   1) 新しいフレーム方向に移動します。

u(p) [count]

   スタックフレーム内で現在のフレームを *count* レベル (デフォルトは
   1) 古いフレーム方向に移動します。

b(reak) [([filename:]lineno | function) [, condition]]

   *lineno* 引数を指定すると、現在のファイルの *lineno* 行目にブレーク
   ポイントを設定します。 行番号の前に *filename* とコロンを付けると、
   まだ読み込んでいないものも含め、別のファイルにブレークポイントを設
   定できます。 ファイルは "sys.path" 上で検索します。 *filename* に使
   える形式は、"/abspath/to/file.py"、"relpath/file.py"、"module"、
   "package.module" です。

   *function* 引数を指定すると、その関数内の最初の実行可能な文にブレー
   クポイントを設定します。 *function* は、現在の名前空間で評価すると
   関数になる任意の式にできます。

   第二引数を指定する場合、その値は式で、その評価値が真でなければブレ
   ークポイントは有効になりません。

   引数なしの場合は、それぞれのブレークポイントに対して、そのブレーク
   ポイントに行き当たった回数、現在の通過カウント ( ignore count ) と
   、もしあれば関連条件を含めてすべてのブレークポイントをリストします
   。

   各ブレークポイントには番号が割り当てられます。 他のすべてのブレーク
   ポイントコマンドは、この番号でブレークポイントを参照します。

tbreak [([filename:]lineno | function) [, condition]]

   一時的なブレークポイントで、最初にそこに達したときに自動的に取り除
   かれます。引数は "break" と同じです。

cl(ear) [filename:lineno | bpnumber ...]

   *filename:lineno* 引数を与えると、その行にある全てのブレークポイン
   トを解除します。スペースで区切られたブレークポイントナンバーのリス
   トを与えると、それらのブレークポイントを解除します。引数なしの場合
   は、すべてのブレークポイントを解除します ( が、はじめに確認します )
   。

disable bpnumber [bpnumber ...]

   空白で区切って指定した番号のブレークポイントを無効にします。 ブレー
   クポイントを無効にすると、プログラムの実行を止めることができなくな
   りますが、ブレークポイントの解除と違いブレークポイントのリストに残
   っており、(再び) 有効にできます。

enable bpnumber [bpnumber ...]

   指定したブレークポイントを有効にします。

ignore bpnumber [count]

   与えられたブレークポイントナンバーに通過カウントを設定します。count
   が省略されると、通過カウントは 0 に設定されます。通過カウントがゼロ
   になったとき、ブレークポイントが機能する状態になります。ゼロでない
   ときは、そのブレークポイントが無効にされず、どんな関連条件も真に評
   価されていて、ブレークポイントに来るたびに *count* が減らされます。

condition bpnumber [condition]

   ブレークポイントに新しい *condition* を設定します。*condition* はブ
   レークポイントを制御する条件式で、この式が真を返す場合のみブレーク
   ポイントが有効になります。*condition* を指定しないと既存の条件が除
   去されます; ブレークポイントは常に有効になります。

commands [bpnumber]

   ブレークポイントナンバー *bpnumber* にコマンドのリストを指定します
   。コマンドそのものはその後の行に続けます。"end" だけからなる行を入
   力することでコマンド群の終わりを示します。例を挙げます:

      (Pdb) commands 1
      (com) p some_variable
      (com) end
      (Pdb)

   ブレークポイントからコマンドを取り除くには、 "commands" のあとに
   "end" だけを続けます。つまり、コマンドを一つも指定しないようにしま
   す。

   *bpnumber* 引数を指定しない場合、"commands" は現存するブレークポイ
   ントのうち最後に設定されたものを対象とします。

   ブレークポイントコマンドはプログラムを走らせ直すのに使えます。単に
   "continue" コマンドや "step"、その他実行を再開するコマンドを使えば
   良いのです。

   実行を再開するコマンド (現在は "continue"、"step"、"next"、"return"
   、"until"、"jump"、"quit" とその省略形) を指定すると、その直後に
   end があるかのようにコマンドリストを終了します。 これは、単なる
   next や step であっても実行を再開すれば、独自のコマンドリストを持つ
   別のブレークポイントに到達する可能性があり、どのリストを実行するか
   曖昧になるためです。

   コマンドリストに "silent" コマンドか、実行を再開するコマンドが含ま
   れている場合、フレーム情報を含むブレークポイントのメッセージは表示
   しません。

   バージョン 3.14 で変更: コマンドリストに実行を再開するコマンドがあ
   る場合、フレーム情報を表示しないようになりました。

s(tep)

   現在の行を実行し、最初に停止できる地点 (呼び出された関数の中、また
   は現在の関数の次の行) で停止します。

n(ext)

   現在の関数の次の行に達するか、あるいは関数が返るまで実行を継続しま
   す。 ("next" と "step" の差は "step" が呼び出された関数の内部で停止
   するのに対し、 "next" は呼び出された関数を (ほぼ) 全速力で実行し、
   現在の関数内の次の行で停止するだけです。)

unt(il) [lineno]

   引数を省略すると、現在より大きい行番号の行に達するまで実行を続けま
   す。

   *lineno* を指定すると、番号が *lineno* 以上である行に到達するまで実
   行します。どちらにしても現在のフレームが返ってきた時点で停止します
   。

   バージョン 3.2 で変更: 明示的に行数指定ができるようになりました。

r(eturn)

   現在の関数が返るまで実行を継続します。

c(ont(inue))

   ブレークポイントに出会うまで、実行を継続します。

j(ump) lineno

   次に実行する行を指定します。最も底のフレーム中でのみ実行可能です。
   前に戻って実行したり、不要な部分をスキップして先の処理を実行する場
   合に使用します。

   ジャンプには制限があり、例えば "for" ループの中には飛び込めませんし
   、 "finally" 節の外にも飛ぶ事ができません。

l(ist) [first[, last]]

   現在のファイルのソースコードを表示します。引数を指定しないと、現在
   の行の前後 11 行分を表示するか、直前の表示を続行します。引数に "."
   を指定すると、現在の行の前後 11 行分を表示します。数値を 1 個指定す
   ると、その行番号の前後 11 行分を表示します。数値を 2 個指定すると、
   開始行と最終行として表示します; 2 個めの引数が 1 個め未満だった場合
   、1 個目を開始行、2 個めを開始行からの行数とみなします。

   現在のフレーム内の現在の行は "->" で表示されます。例外をデバッグ中
   の場合、例外が発生または伝搬した行は、それが現在の行とは異なるとき
   ">>" で表示されます。

   バージョン 3.2 で変更: ">>" マーカーが追加されました。

ll | longlist

   現在の関数またはフレームの全ソースコードを表示します。注目する行は
   "list" と同じようにマーカーがつきます。

   Added in version 3.2.

a(rgs)

   現在の関数の引数と、その現在の値を表示します。

p expression

   現在のコンテキストにおいて *expression* を評価し、その値をプリント
   します。

   注釈:

     "print()" も使えますが、これはデバッガーコマンドではありません
     --- これは Python の関数 "print()" が実行されます。

pp expression

   "p" コマンドと同様ですが、*expression* の値を "pprint" モジュールで
   読みやすく整形して表示します。

whatis expression

   *expression* の型を表示します。

source expression

   *expression* のソースコードの取得を試み、可能であれば表示します。

   Added in version 3.2.

display [expression]

   現在のフレームで実行が停止するたびに *expression* の値を調べ、変化
   していれば表示します。

   *expression* を指定しない場合、現在のフレームで表示対象として登録さ
   れているすべての式を表示します。

   注釈:

     display は *expression* を評価し、前回の評価結果と比較します。 そ
     のため、結果がミュータブルな場合は変更を検出できないことがありま
     す。

   以下はプログラム例です:

      lst = []
      breakpoint()
      pass
      lst.append(1)
      print(lst)

   比較する前に "lst.append(1)" が評価結果をその場で変更してしまうため
   、display は "lst" の変更を検出できません。

      > example.py(3)<module>()
      -> pass
      (Pdb) display lst
      display lst: []
      (Pdb) n
      > example.py(4)<module>()
      -> lst.append(1)
      (Pdb) n
      > example.py(5)<module>()
      -> print(lst)
      (Pdb)

   コピーの仕組みを使うと、変更を検出できるようになります。

      > example.py(3)<module>()
      -> pass
      (Pdb) display lst[:]
      display lst[:]: []
      (Pdb) n
      > example.py(4)<module>()
      -> lst.append(1)
      (Pdb) n
      > example.py(5)<module>()
      -> print(lst)
      display lst[:]: [1]  [old: []]
      (Pdb)

   Added in version 3.2.

undisplay [expression]

   現在のフレーム内で *expression* をこれ以上表示しないようにします。
   *expression* を指定しない場合、現在のフレームで display 指定されて
   いる式を全てクリアします。

   Added in version 3.2.

interact

   現在のスコープのローカル名前空間とグローバル名前空間から初期化した
   、新しいグローバル名前空間で、"code" モジュールを使って対話型インタ
   ープリタを開始します。 インタープリタを終了してデバッガに戻るには、
   "exit()" または "quit()" を使います。

   注釈:

     "interact" はコード実行用に新しい専用の名前空間を作るため、変数へ
     の代入は元の名前空間に影響しません。 ただし、参照しているミュータ
     ブルなオブジェクトへの変更は、通常どおり元の名前空間にも反映され
     ます。

   Added in version 3.2.

   バージョン 3.13 で変更: "exit()" と "quit()" で "interact" コマンド
   を終了できるようになりました。

   バージョン 3.13 で変更: "interact" は "sys.stderr" ではなく、デバッ
   ガの出力先に出力するようになりました。

alias [name [command]]

   *command* を実行する、*name* という名前のエイリアスを作ります。
   *command* を引用符で囲んでは *いけません*。 置き換えるパラメータは
   "%1"、"%2"、...、"%9" で指定でき、"%*" はすべてのパラメータに置き換
   えられます。 *command* を省略すると、*name* に対する現在のエイリア
   スを表示します。 引数を指定しない場合は、すべてのエイリアスを一覧表
   示します。

   エイリアスは入れ子になってもよく、pdb プロンプトで合法的にタイプで
   きるどんなものでも含めることができます。内部 pdb コマンドをエイリア
   スによって上書きすることが *できます*。そのとき、このようなコマンド
   はエイリアスが取り除かれるまで隠されます。エイリアス化はコマンド行
   の最初の語へ再帰的に適用されます。行の他のすべての語はそのままです
   。

   例として、二つの便利なエイリアスがあります (特に ".pdbrc" ファイル
   に置かれたときに):

      # インスタンス変数を表示する (使い方: "pi classInst")
      alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")
      # self のインスタンス変数を表示する
      alias ps pi self

unalias name

   指定したエイリアス *name* を削除します。

! statement

   現在のスタックフレームのコンテキストで、1 行の *statement* を実行し
   ます。 文の最初の単語がデバッガコマンドに似ている場合を除き、感嘆符
   は省略できます。 例えば、次のようにします:

      (Pdb) ! n=42
      (Pdb)

   グローバル変数を設定するには、代入の前に同じ行で "global" 文を指定
   できます。 例えば、次のようにします:

      (Pdb) global list_options; list_options = ['-l']
      (Pdb)

run [args ...]
restart [args ...]

   デバッグ中の Python プログラムを再実行します。*args* が与えられると
   、 "shlex" で分割され、結果が新しい "sys.argv" として使われます。ヒ
   ストリー、ブレークポイント、アクション、そして、デバッガーオプショ
   ンは引き継がれます。 "restart" は "run" の別名です。

   バージョン 3.14 で変更: デバッガを "'inline'" モードで起動した場合
   は、"run" と "restart" コマンドが無効になるようになりました。

q(uit)

   デバッガを終了します。 実行中のプログラムは中断されます。 ファイル
   終端の入力は "quit" と同等です。

   デバッガを "'inline'" モードで起動した場合は、確認のプロンプトを表
   示します。 "y"、"Y"、"<Enter>"、"EOF" のいずれかで終了を確定します
   。

   バージョン 3.14 で変更: デバッガを "'inline'" モードで起動した場合
   は、確認のプロンプトを表示するようになりました。 確認後は、次のトレ
   ースイベントで "bdb.BdbQuit" を送出する代わりに、直ちに
   "sys.exit()" を呼び出します。

debug code

   *code* をステップ実行する、再帰的なデバッガに入ります。 *code* は現
   在の環境で実行する任意の式または文です。

retval

   現在の関数の最後の return による返り値を表示します。

exceptions [excnumber]

   連鎖した例外を一覧表示したり、例外間を移動したりします。

   When using "pdb.pm()"  or "Pdb.post_mortem(...)" with a chained
   exception instead of a traceback, it allows the user to move
   between the chained exceptions using "exceptions" command to list
   exceptions, and "exceptions <number>" to switch to that exception.

   以下はプログラム例です:

      def out():
          try:
              middle()
          except Exception as e:
              raise ValueError("reraise middle() error") from e

      def middle():
          try:
              return inner(0)
          except Exception as e:
              raise ValueError("Middle fail")

      def inner(x):
          1 / x

      out()

   "pdb.pm()" を呼び出すと、例外間を移動できます。

      > example.py(5)out()
      -> raise ValueError("reraise middle() error") from e

      (Pdb) exceptions
        0 ZeroDivisionError('division by zero')
        1 ValueError('Middle fail')
      > 2 ValueError('reraise middle() error')

      (Pdb) exceptions 0
      > example.py(16)inner()
      -> 1 / x

      (Pdb) up
      > example.py(10)middle()
      -> return inner(0)

   Added in version 3.13.

-[ 脚注 ]-

[1] フレームが属するモジュールは、そのフレームのグローバルの
    "__name__" によって決定されます。
