チュートリアル: Visual Studio でデバッガーでコードを実行する
この記事では、チュートリアル シリーズの手順 4 Visual Studioでの Python の操作について説明します。
Visual Studio には、プロジェクトを管理する機能、豊富な編集エクスペリエンス、対話型ウィンドウ、Python コード用のフル機能デバッグが用意されています。 このチュートリアル シリーズの手順 4 では、デバッガー を使用して、ループのすべてのイテレーションを含め、コードを段階的に実行します。 デバッガーでは、特定の条件が満たされたときにプログラムを一時停止できます。 プログラムが一時停止している時点で、プログラム全体の状態を調べて変数の値を変更できます。 このようなアクションは、プログラムのバグを追跡するために不可欠であり、正確なプログラム フローに従うのに役立つ支援も提供します。
チュートリアルの手順 4 では、次の方法を学習します。
- Visual Studio の デバッガー で Python コードを実行する
- ブレークポイントと条件を設定する
- プログラムの状態を調べて変数を変更する
- デバッガー のウィンドウとアクションを探索する
前提 条件
- このチュートリアルの手順 2: コードの記述と実行および手順 3: 対話型 REPL ウィンドウの使用に関する記事で作成されたコードを含む Python ファイル (.py) が含まれている Python アプリケーション プロジェクト。
Python ファイルを準備する
デバッグの演習を準備するには、次の手順に従って、より堅牢なコードを含むように Python プロジェクト ファイルを更新します。
エディターで Python プロジェクト ファイル (.py) を開きます。
ファイル内のコードを次のコードに置き換えます。 このバージョンのコードでは、デバッガーで個別の手順を調べることができるように、
make_dot_string
関数が拡張されます。for
ループをmain
関数に移動し、main
関数を呼び出して明示的に実行します。from math import cos, radians # Create a string with spaces proportional to a cosine of x in degrees def make_dot_string(x): rad = radians(x) # cos works with radians numspaces = int(20 * cos(rad) + 20) # Scale to 0-40 spaces st = ' ' * numspaces + 'o' # Place 'o' after the spaces return st def main(): for i in range(0, 1800, 12): s = make_dot_string(i) print(s) main()
デバッグを開始する
これで、デバッガーで更新された Python コードの確認を開始する準備ができました。
ツール バーの [デバッグ] >[デバッグの開始]選択するか、F5 キーボード ショートカットを使用して、コードが正常に動作することを確認します。 これらのコマンドは、デバッガーでコードを実行します。
デバッガー は問題を検出しないため、プログラムは正常に実行されます。 出力ウィンドウが開き、余弦波パターンの反復がいくつか表示されます。 任意のキーを選択して、出力ウィンドウを閉じます。
ヒント
プログラムの完了時に出力ウィンドウを自動的に閉じるには、[ツール] >[オプション]を選択し、Python>デバッグ タブを展開して、[プロセスが正常に終了したときに入力を待機する] をオフ オプションをオフにします。
次のいずれかの方法を使用して、
for
ループ ステートメントにブレークポイントを設定します。- コード行の左余白で選択します。
- コード行を右クリックし、[ブレークポイント] >[ブレークポイントの挿入]選択します。
- コード行に挿入キャレットを配置し、[デバッグ] >[ブレークポイントの切り替え]選択します (または、F9 キーボード ショートカットを使用します)。
ブレークポイントは、プログラムの状態を調べることができるように、マークされたポイントでコードの実行を停止します。 ブレークポイントが設定されている各行に赤い点が表示されます。
デバッガー をもう一度起動します (F5)。 プログラムの実行中のコードは、ブレークポイントが設定された行で停止します。 これで、呼び出し履歴を調べ、実行中のプログラム コードのこの状態の変数を調べることができます。
Visual Studio には、次のウィンドウを含む、プログラム コードと実行データを監視するさまざまな方法が用意されています。
- その呼び出し履歴 には、プログラムコードの関数呼び出しとメソッド呼び出しの記録が表示されます。
- スコープ内で定義されている変数は、[自動変数] ウィンドウに表示されます。
- ローカル ビューには、Visual Studio が現在のスコープ (関数を含む) で見つけたすべての変数が、コードで定義される前であっても表示されます。
使用可能なウィンドウとアクションの完全な一覧を表示するには、[デバッグ] >[Windows]選択します。
デバッガーの ウィンドウを開いて、ブレークポイントが発生したときにプログラムの状態を表示できます。
デバッガー アクションを使用する
Visual Studio がブレークポイントでコードの実行を停止する場合、コードをステップ実行したり、コード ブロックを実行したりしてから、もう一度中断するために使用できるコマンドがいくつかあります。 コマンドは Visual Studio のいくつかの場所で使用できます。たとえば、デバッガー ツール バー、デバッグ メニュー、コード エディターの右クリック コンテキスト メニュー、キーボード ショートカットを使用できます。
Visual Studio ウィンドウの上部にある デバッガー ツール バーを使用すると、最も一般的なデバッグ コマンドにすばやくアクセスできます。
次の表は、ツール バーの左から右に表示されるこれらのコマンドをまとめたものです。
アクション | ショートカット | 説明 |
---|---|---|
続行 | F5 | 次のブレークポイントに達するか、プログラムが完了するまでコードを実行します。 |
すべて中断する | Ctrl + Alt + Break | 実行時間の長いプログラムを一時停止します。 |
デバッグの停止 | Shift + F5 | 現在の時点でプログラムを停止し、デバッガーを終了します。 |
再起動 | Ctrl + Shift + F5 | 現在の時点でプログラムを停止し、デバッガーでプログラムの実行を最初から再起動します。 |
次のステートメントの を表示する | Alt + Num + \ | コードで実行する次のステートメントに戻ります。 このコマンドは、デバッガーの が停止しているコード内の場所を見つけるのに役立ちます。 |
ステップ インする | F11 | 次のステートメントを実行して停止します。 次のステートメントが関数の呼び出しである場合、デバッガー は関数にステップインし、最初の行で停止します。 |
ステップ オーバーする | F10 | 関数の呼び出し (すべてのコードを実行する) や戻り値の適用など、次のステートメントを実行します。 このコマンドを使用すると、デバッグする必要のない関数を簡単にスキップできます。 |
ステップ アウトする | Shift + F11 | 現在の関数が終了するまでコードを実行し、呼び出し元のステートメントにステップ 実行して一時停止します。 このコマンドは、現在の関数の残りの部分をデバッグする必要がない場合に便利です。 |
Python コードでデバッガー アクション 操作するには、次の手順に従います。
ステップ オーバー アクションを使用して、
for
ループ ステートメント ステップ オーバーします。ステップ実行 により、デバッガー は、呼び出された関数を含む現在のコード行を実行し、すぐに一時停止します。 ステップオーバーした後、変数
i
が [ローカル] ウィンドウ と [自動] ウィンドウ で定義されていることに気づきます。次のコード行 をステップオーバーします。これは
make_dot_string
関数を呼び出します。このインスタンスでは、ステップ オーバー により、デバッガー は完全な
make_dot_string
関数を実行し、関数から戻った後に一時停止します。 デバッガー は、別のブレークポイントが存在しない限り、関数内で停止しません。コードをさらに数回ステップオーバーし、ローカル または Autos ウィンドウの値がどのように変化するかを確認します。
[ローカル] または [自動変数] ウィンドウで、変数の [値] 列をダブルクリックして値を編集します。 この例では、
s
変数の値を'Hello, Python Application'
に変更します。 値は必ず一重引用符で囲んでください。 を選択し、 を入力するか、値の外側の任意の領域を選択して変更を適用します。make_dot_string
関数の呼び出しまで、ステップ イン を使用してコードのステップ実行を続けます。関数の場合、ステップ インすると、デバッガーは関数の呼び出しと、関数のコードへのステップ インの両方を行います。 デバッグ プロセスが関数内にある場合は、そのローカル変数を調べて、そのコードを具体的にステップ実行できます。 この例では、Step into アクションが
make_dot_string
関数に移動します。make_dot_string
関数から戻るまで、[ステップ イン] でステップ実行を続けます。make_dot_string
関数コードの末尾に達すると、次の手順では、s
変数の新しい戻り値を使用してfor
ループに* デバッガーを返します。print
ステートメントにもう一度ステップ インすると、print
ステートメントの ステップ イン アクションがその関数に入らないことに注意してください。 この動作は、print
関数が Python で記述されていないためです。 これは Python ランタイム内のネイティブ コードです。ステップ イン を使って、
make_dot_string
関数の途中まで引き続き進み、次に ステップ アウト を使用し、デバッガー がfor
ループに戻るのを確認します。ステップ アウトでは、デバッガー は関数の残りの部分を実行し、呼び出し元のコードで自動的に一時停止します。 このアクションは、長い関数の一部をステップ実行し、関数の観察を終了したい場合に役立ちます。 [ステップ アウト] は、残りのコードをすべて、または呼び出し元のコードで設定されている明示的なブレークポイントに到達するまで、ステップ実行します。
Continue (F5) を使用して、次のブレークポイントに到達するまでプログラムの実行を続行します。
for
ループにブレークポイントが設定されているため、次のイテレーションで中断します。ローカル ウィンドウで、
s
変数の値の変化を観察することで、プログラムの実行が継続されていることを確認できます。
ブレークポイント条件を使用する
ループの数百回の繰り返しをステップ実行するのは面倒な場合があるため、Visual Studio ではブレークポイントに 条件 を追加できます。 ブレークポイントの条件を設定すると、デバッガー は、条件が満たされたときにのみ、ブレークポイントでプログラムを一時停止します。
次の手順では、i
変数の値が 1600 を超えた場合にのみ、デバッガー が一時停止するように、for
ループ ステートメントにブレークポイント条件を定義する方法を示します。
ブレークポイントの条件を設定するには、赤いブレークポイントの点を右クリックし、[条件] 選択するか、Alt +F9>Cキーボード ショートカットを使用します。
ブレークポイント設定 ポップアップ ダイアログで、次の設定を構成して、条件を作成します。
条件の種類を条件式 に設定します。
条件の評価を [true である] に定義します。
条件値として「
i > 1600
」と入力します。を選択し、を閉じます。
F5 選択して、デバッグとプログラムの実行を続行します。 プログラムが条件付きブレークポイントに到達する前に、多くのイテレーションを実行することを確認します。
デバッガーが条件付きブレークポイントに達したときにプログラムの実行が正しく一時停止することを確認できます。 条件が満たされると、[ローカル] ウィンドウに
i
変数の値が1608
として表示されます。プログラムを実行して完了するには、ブレークポイントを無効にし、プログラムの実行を続行します。
赤い点にカーソルを合わせ、[を無効にする]選択するか、赤い点を右クリックして [ブレークポイント を無効にする]選択します。
の[続行] を選択するか、F5キーを押してプログラムを実行します。
プログラムが終了すると、Visual Studio はデバッグ セッションを停止し、編集モードに戻ります。
ブレークポイントを削除することもできます。 赤い点を選択するか、ドットを右クリックし、[ブレークポイントの削除] 選択します。 このアクションにより、定義された条件も削除されます。
ヒント
Python インタープリタ自体の起動に失敗する状況などでは、プログラムの実行が終了した直後に、Python 出力ウィンドウがすぐに閉じて「続行するには何かキーを押してください」というプロンプトが表示されない場合があります。 一時停止とプロンプトを強制するには、[デバッグ] タブの [>インタープリター引数の実行] フィールドに -i
引数を追加します。この引数は、コードの実行後に Python インタープリターを対話型モードにします。 プログラムは、Ctrl +Z+Enter を押してウィンドウを閉じるのを待っています。