#
9.1 デバッガコマンド

デバッガは以下のコマンドを認識します。ほとんどのコマンドは一文字または二文字に省略することができます。例えば、"`h(elp)`"が意味するのは、ヘルプコマンドを入力するために"`h`"か"`help`"のどちらか一方を使うことができるということです(が、"`he`"や"`hel`"は使えず、また"`H`"や"`Help`"、"`HELP`"も使えません)。コマンドの引数は空白(スペースまたはタブ)で区切られなければなりません。オプションの引数はコマンド構文の角括弧("`[]`")の中に入れなければなりません。角括弧をタイプしてはいけません。コマンド構文における選択肢は垂直バー("`|`")で区切られます。

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

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

複数のコマンドを"`;;`"で区切って一行で入力することができます。(一つだけの"`;`"は使われません。なぜなら、Pythonパーサへ渡される行内の複数のコマンドのための分離記号だからです。)コマンドを分割するために何も知的なことはしていません。たとえ引用文字列の途中であっても、入力は最初の"`;;`"対で分割されます。

デバッガはエイリアスをサポートします。エイリアスはパラメータを持つことができ、調査中のコンテキストに対して人がある程度柔軟に対応できます。

ファイル.pdbrc はユーザのホームディレクトリか、またはカレントディレクトリにあります。それはまるでデバッガのプロンプトでタイプしたかのように読み込まれて実行されます。これは特にエイリアスのために便利です。両方のファイルが存在する場合、ホームディレクトリのものが最初に読まれ、そこに定義されているエイリアスはローカルファイルにより上書きされることがあります。

h(elp) [command]

  引数なしでは、利用できるコマンドの一覧をプリントします。引数としてcommandがある場合は、そのコマンドについてのヘルプをプリントします。"`help pdb`"は完全ドキュメンテーションファイルを表示します。環境変数PAGERが定義されているならば、代わりにファイルはそのコマンドへパイプされます。command引数が識別子でなければならないので、"`!`"コマンドについてのヘルプを得るためには"`help exec`"と入力しなければならない。

w(here)

  スタックの底にある最も新しいフレームと一緒にスタックトレースをプリントします。矢印はカレントフレームを指し、それがほとんどのコマンドのコンテキストを決定します。

d(own)

  (より新しいフレームに向かって)スタックトレース内でカレントフレームを一レベル下げます。

u(p)

  (より古いフレームに向かって)スタックトレース内でカレントフレームを一レベル上げます。

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

  lineno引数がある場合は、現在のファイルのその場所にブレークポイントを設定します。function引数がある場合は、その関数の中の最初の実行可能文にブレークポイントを設定します。別のファイル(まだロードされていないかもしれないもの)のブレークポイントを指定するために、行番号はファイル名とコロンをともに先頭に付けられます。 ファイルは`sys.path`にそって検索されます。各ブレークポイントは番号を割り当てられ、その番号を他のすべてのブレークポイントコマンドが参照することに注意してください。

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

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

tbreak [[filename:]lineno`|`function[, condition]]

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

cl(ear) [bpnumber [bpnumber ...]]

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

disable [bpnumber [bpnumber ...]]

  スペースで区切られたブレークポイントナンバーのリストとして与えられるブレークポイントを無効にします。ブレークポイントを無効にすると、プログラムの実行を止めることができなくなりますが、ブレークポイントの解除と違いブレークポイントのリストに残ったままになり、(再び)有効にすることができます。

enable [bpnumber [bpnumber ...]]

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

ignore bpnumber [count]

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

condition bpnumber [condition]

  conditionはブレークポイントがhonored(???)する前に真に評価しなければならない式です。conditionがない場合は、どんな既存の条件も取り除かれます。すなわち、ブレークポイントに条件がありません。

s(tep)

  現在の行を実行し、最初に実行可能なものがあらわれたときに(呼び出された関数の」中か、現在の関数の次の行で)停止します.

n(ext)

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

r(eturn)

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

c(ont(inue))

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

j(ump) lineno

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

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

l(ist) [first[, last]]

  現在のファイルのソースコードをリスト表示します。引数なしの場合は、現在の行の周囲を11行リストするか、または前のリストの続きを表示します。引数が一つある場合は、その行の周囲を11行表示します。引数が二つの場合は、与えられた範囲をリスト表示します。第二引数が第一引数より小さいときは、カウントと解釈されます。

a(rgs)

  現在の関数の引数リストをプリントします。

p expression

  現在のコンテキストにおいてexpressionを評価し、その値をプリントします。(注意: "`print`"も使うことができますが、デバッガコマンドではありません -- これはPythonの`print`文を実行します。)

pp expression

  `pprint`モジュールを使って例外の値が整形されることを除いて"`p`"コマンドと同様です。

alias [name [command]]

  nameという名前のcommandを実行するエイリアスを作成します。コマンドは引用符で囲まれていてはいけません。入れ替え可能なパラメータは"`%1`"、"`%2`"などで指し示され、さらに"`%*`"は全パラメータに置き換えられます。コマンドが与えられなければ、nameに対する現在のエイリアスを表示します。引数が与えられなければ、すべてのエイリアスがリストされます。

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

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

      #Print instance variables (usage "pi classInst")
      alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
      #Print instance variables in self
      alias ps pi self

unalias name

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

[!]statement

  現在のスタックフレームのコンテキストにおいて(一行の)statementを実行します。文の最初の語がデバッガコマンドと共通でない場合は、感嘆符を省略することができます。グローバル変数を設定するために、同じ行に"`global`"コマンドとともに代入コマンドの前に付けることができます。

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

q(uit)

  デバッガを終了します。実行しているプログラムは中断されます。