前の関連記事:PyCharm(3)デバックツールウィンドウの3つの枠
デバックツールウィンドウにでてくる各ボタンについてみていきます。
デバッグツールバー
まずはデバッグツールウィンドウの左に縦に並んでいるボタンです。

これをクリックすると止まっている場所からプログラムがスタートして終了した後、また開始して最初のブレークポイントで止まります。
プログラムの最初のブレークポイントまでの間にあるブレークポイントは無視されます。
プログラムが終了しているときはデバッグボタン


止まっているところから次のブレークポイントまで実行されます。
for 文にブレークポイントを設定している場合はループごとに止まることになります。

最初にブレークポイントで止めたあとにリズームしてこの一時停止ボタンを的確なタイミングでクリックできるのならブレークポイントを設定せずにデバッグできます。
ThreadSample.pyは一時停止で止めやすいです。

プログラムを止まっているところで終了します。
止まったところで終了するのでプログラムは最後まで実行されません。

設定されたブレークポイントを一覧表示します。
プロジェクト内のすべてのファイルのブレークポイントが一覧表示されます。
「Group by file」ボタンをクリックするとファイルごとにまとめてくれます。
このボタンを押した状態でないときは順番がばらばらで見にくいです。
ファイルごとにして、行番号順に表示してほしいですね。
この画面からブレークポイントの追加や削除などブレークポイントの設定に関するすべての操作ができるようです。

これが押された状態でリズームボタンをクリックすると途中のブレークポイントは無視されて最後までプログラムが実行されて終わります。

これをクリックすると、フレーム枠と変数枠とウォッチ枠がデフォルトの状態に復元されます。
それぞれの枠は「Hide」ボタンで非表示にすることができます。
閉じた枠はデバッグツールウィンドウの右上に表示されるアイコンをクリックすることで個別に復元できます。



変数枠の変数をアルファベット順に並び替えます。

PyCharm(2)ブレークポイント設定後デバックツールウィンドウを出すででてきた「Pin Tab」機能を有効にするものですが、いまのところ使い方がわかりません。

タブを閉じます。
ステッピングツールバー

青い背景で表示された実行を止めている行を表示させてくれます。


ステップオーバーボタンは呼び出された関数の中は実行結果のみ返します。
つまり関数のフレームの中では止まりません。
それに対してステップイントゥボタンは呼び出された関数の中に移動します。
つまり関数のフレームの中に入ります。
この6行目でブレークポイントを設定してデバッグボタンをクリックすると6行目で止まります。
この状態でステップオーバーボタンをクリックすると、fib(5)は実行結果が返されて、その結果を出力してプログラムが終了します。
それに対してステップイントゥボタンをクリックするとfib()の中の2行目に飛んで止まります。
6行目で止まっているときにメニューからRun→Smart Step Into、を選択するとステップイントゥする関数を選択できます。

Choosing a Method to Step IntoのTipには、SettingsのDebugger. Steppingページでステップイントゥしないように設定したところにでも強制的にステップイントゥするときに使う、と書いてあります。
肝心のステップイントゥしないようにする設定画面を見つけられませんので、いまのところ使う機会はなさそうです。

外のフレームまで出ます。
このようにfib()の中で止まっている状態でステップアウトボタンをクリックするとfib()のなかは一気に実行され、6行目まで行きます。
ところがfib()のなかのfor文にブレークポイントを設定してそこで止まった状態からステップアウトボタンをクリックすると、なぜかfor文のループごとに止まってからフレームをでます。

デバッグ中にプログラムが止まっている状態で、カーソルのある行まで実行されます。
一時的なブレークポイントをいちいち設定する手間が省けます。
これもステップアウトボタンのときと同様に3行目のfor文にブレークポイントを設定して使うと思ったように動きませんね。
これらの機能を使うときはfor文の行にはブレークポイントを設定しないほうがよさそうです。
Evaluate Expressionウィンドウで「Evaluate」した内容は本体に反映される

エディタでコードを選択した状態でこのボタンをクリックするとEvaluate Expressionウィンドウが開きます。
3行目でブレークポイントを設定してデバッガを起動し、4行目の「lst」を選択した状態で式評価ボタンをクリックします。
Expressionの項目に「lst」が入っています。
「Evaluate」ボタンをクリックするとlstの中身が表示されます。
これだけだと、PyCharm(3)デバックツールウィンドウの3つの枠のInspectと機能の違いがわかりませんね。
Evaluate ExpressionウィンドウのExpressionの欄を変更して「Evaluate」をクリックするとそれもちゃんと評価されます。
ちゃんとlst[0]の内容が出力されています。
この機能はLibreOfficeのUNOオブジェクトのプロパティなどをみるときなどに重宝しそうです。
Expressionの欄で代入をするとどうなるでしょう?
「Evaluate」ボタンをクリックするとResultにはNoneしか返ってこないと思って「Close」をクリックしました。
プログラム本体に戻ってステップオーバーボタンをクリックしました。
Valuablesのlstの内容をみてみるとEvaluate Expressionウィンドウで代入した内容が反映されています。
右クリック→Set Value、では変数の値の変更ができませんでしたが、Evaluate Expressionウィンドウで代入することで事足りそうですね。
Evaluate Expressionウィンドウで複数行を「Evaluate」する
Evaluate Expressionウィンドウでは複数行も実行できます。
3行目と4行目を選択して式評価ボタンをクリックすると今度はCode FragmentモードでEvaluate Expressionウィンドウが開きます。
これで「Evaluate」をクリックします。
先ほどの代入文と同じくResultはNoneが返ってくるのみです。
lstの中身がどうなったのかはCode fragmentの欄に「lst」と入力して「Evaluate」をクリックするとわかります。
for文が実行された結果のlstの値になっています。
これを「Close」してステップオーバーをクリックすると先ほどと同様にやはりEvaluate Expressionウィンドウで実行した内容が反映されています。
Evaluate Expressionウィンドウで実行した内容を反映させない方法はないようです。
参考にしたサイト
Debug Tool Window
デバックツールウィンドウにでてくる各ボタンの解説。
Choosing a Method to Step Into
Smart Step Intoでステップイントゥする関数を選択できます。
Evaluating Expressions
Evaluate Expressionウィンドウの使い方。
0 件のコメント:
コメントを投稿