この記事に書かれていること
PyWebでデバッカー(pdb)が利用できるようになりました。しかし、ブラウザで実行する関係からいくつかの制約があります。本記事では、pdbの操作方法と制約事項について説明します。
pdb利用方法
(1)pdbのインポート
デバックしたいプログラムでPdbをインポートします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import random import pdb print("START") x = random.randint(0,200) if x >= 18: print(x,"成人") else: print(x,"未成年") print("END") |
(2)ブレークポイント
プログラムを止めたい箇所にブレークポイント命令(breakpoint())を挿入します。(複数箇所に挿入できます)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import random import pdb print("START") breakpoint() x = random.randint(0,200) if x >= 18: print(x,"成人") else: print(x,"未成年") print("END") |
(3)プログラムを実行
デバッカー(Pdb)は、PCモードのみ実行可能なため、PCモードにします。
右上の緑三角形ボタンでプログラムを実行します。
(4)デバッカーパネル
実行するとデバッカーのパネルが開きます。プログラムはブレークポイントの行まで実行されています。このパネルでデバッカーコマンドを入力しながらデバックを行います。
注意点➀
ブラウザの別タブをクリックするとパネルが閉じられ、デバッグが終了してしまいます。
別サイトを見ながらデバッグを行うには、Chromeでデバッグを行っている場合はEdgeでサイトを開く、Edgeでデバッグを行っている場合はChromeでサイトを開くようにしてください。
注意点②
パネルには最大23行までしか表示できません。
主要コマンド一覧
コマンド | 説明 |
---|---|
l | プログラム表示 |
l . | 実行行の前後を表示 |
l <開始行>,(<終了行>) | 行指定で表示。終了行は省略可能 |
n | 次行を実行 |
s | 次行を実行。次行が関数なら関数内に入り停止 |
r | 関数内のプログラムを全て実行 |
p | 変数表示 |
p <変数名> | 指定した変数の内容を表示 |
c | 次のブレークポイントまで実行(ブレークポイントがなければ残りのプログラム全て実行) |
b | ブレークポイントの管理 |
b <行番号> | 新たなブレークポイントを設定 |
b | 設定されたブレークポイントを表示 |
cl | ブレークポイントの解除 |
cl | 全てのブレークポイントを解除 |
cl 番号 番号 番号 | 特定のブレークポイントを解除。番号は上記「b」コマンドで確認。複数解除したい場合はスペース区切りで記述 |
h | Pdbのヘルプ |
h | コマンド一覧表示 |
h <コマンド名> | コマンドのヘルプを表示 |
q | デバッガの終了 |
注意点③
パネルには次に実行する命令が表示されます。しかしプログラムの最後の命令が関数の場合は、最後の命令が表示されずに1行目の命令が表示されてしまいます。ここで「n」コマンドを入力することによって、最後の命令が表示されます。
デバック
実際にデバッグを行っていきます。
(1)プログラム表示
「l .」コマンドで実行行の前後のプログラムを表示します。
<結果>
(2)次行実行
「n」コマンドで次の行(7 x = random.randint(0,200))を実行します。
<結果>
(3)変数確認
変数xの内容を「p」コマンドで確認します。
<結果>
(4)次行実行
「n」コマンドで、次の行(9 if x >= 18:)を実行します。
<結果>
xは8なので、次はelseの中が実行されるようです。
(5)次行実行
「n」コマンドで、次の行(print(x,”未成年”)を実行します。
<結果>
次の命令は最後の命令になるはずですが、関数なので(注意点③を参照)、最初の命令が表示されてしまいました。
ここで「n」コマンドを入力します。
<結果>
最後の命令が表示されました。
(6)残りのプログラムを実行
「c」コマンドで残りプログラムを全て実行します。
<結果>
プログラムが終了するとパネルが閉じられ、今までの実行結果がコンソールに表示されます。