手順 4: デバッガーでコードを実行する
前の手順: 対話型 REPL ウィンドウを使用する
Visual Studio には、プロジェクトの管理、豊富な編集機能、インタラクティブ ウィンドウ、Python コードの完全な機能を備えたデバッグ機能が用意されています。 デバッガーでは、ループのすべてのイテレーションを含め、コードをステップ実行できます。 また、特定の条件に当てはまるとき、プログラムを一時停止することもできます。 デバッガーによって任意の時点でプログラムが一時停止された場合、プログラム全体の状態を確認して変数の値を変更できます。 このような操作は、プログラムのバグを追跡するために必須です。また、プログラムの正確なフローを理解するのに、非常に便利です。
PythonApplication1.py ファイル内のコードを次のコードに置き換えます。 このコードのバリエーションが
make_dot_string
を展開し、デバッガーで個別のステップを調べることができるようになります。 また、これはmain
関数にfor
ループを配置し、その関数を呼び出してそれを明示的に実行します。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()
コードが正常に機能することを確認します。それには、F5 キーを押すか、または [デバッグ]>[デバッグの開始] メニュー コマンドを選択します。 このコマンドにより、デバッガーでコードが実行されます。 現時点で、実行中にプログラムを一時停止する処理は何も行われていません。これは、波模様が数回繰り返して印刷されるだけです。 任意のキーを押して、出力ウィンドウを閉じます。
ヒント
プログラムが完了したときに出力ウィンドウを自動的に閉じるには、[ツール]>[オプション] メニュー コマンドの順に選択し、Python ノードを展開し、[デバッグ] を選択してから、[プロセスが正常終了した場合に入力を待機する] オプションをクリアします。
デバッグに関する詳細と、スクリプトとインタープリターの引数を設定する方法については、「Python コードのデバッグ」を参照してください。
for
ステートメントにブレークポイントを設定します。それには、行の灰色の余白を一度クリックするか、行にキャレットを配置して [デバッグ]>[ブレークポイントの設定/解除] コマンドを使用します (または F9 キーを押します)。 灰色の余白に、ブレークポイントを示す赤い点が表示されます (下図の矢印の先)。デバッガーをもう一度開始 (F5 キー) すると、ブレークポイントを設定した行でコードの実行が停止します。 ここで、呼び出し履歴を確認したり、変数を調べたりすることができます。 スコープ内の変数が定義されている場合、[自動変数] ウィンドウに表示されます。このウィンドウの下の [ローカル] ビューに切り替え、Visual Studio が現在のスコープ (関数も含む) で見つけたすべての変数を定義前でも表示することができます。
Visual Studio ウィンドウの上部にある、デバッグ ツールバー (下記参照) を確認します。 このツールバーからは、最も一般的なデバッグ コマンド (これは [デバッグ] メニューにもあります) に迅速にアクセスできます。
左から右にボタンを説明します。
ボタン コマンド 続行 (F5) 次のブレークポイントまたはプログラムの完了までプログラムを実行します。 すべて中断(Ctrl+Alt+Break) 実行時間の長いプログラムを一時停止します。 デバッグの停止(Shift+F5) その場でプログラムを停止し、デバッガーを終了します。 再起動(Ctrl+Shift+F5) その場でプログラムを停止し、デバッガーで最初から再開します。 次のステートメントの表示 (Alt+Num*) 実行する次のコード行に切り替えます。 これは、デバッグ セッション中に、コード内を移動するときに、デバッガーが一時停止しているところにすばやく戻りたい時に便利です。 ステップ イン (F11) 呼び出された関数を開始して、次のコード行を実行します。 ステップ オーバー (F10) 呼び出された関数を開始せずに、次のコード行を実行します。 ステップ アウト(Shift+F11) 現在の関数の残りの部分を実行し、呼び出し元のコードで一時停止します。 [ステップ オーバー] を使用し、
for
ステートメントをステップ オーバーします。 ステップ実行とは、デバッガーがすべての関数呼び出しを含む現在のコード行を実行し、またすぐに一時停止することを意味します。 変数i
が現在、[ローカル] および [自動変数] ウィンドウでどのように定義されているかをコードでご確認ください。次のコード行をステップ オーバーし、
make_dot_string
を呼び出し、一時停止します。 ここでのステップ オーバーとは、デバッガーがmake_dot_string
全体を実行し、戻るときに一時停止することを意味します。 そこに別のブレークポイントがある場合を除き、デバッガーはその関数内では停止しません。コードをあと数回ステップ オーバーし、[ローカル] または [自動変数] ウィンドウの値がどのように変わるか確認します。
[ローカル] または [自動変数] ウィンドウで、値を編集するために
i
またはs
変数のいずれかの [値] 列でダブルクリックします。 変更を適用するには、Enter キーを押すか、その値以外の任意の領域をクリックします。[ステップ イン] を使用して、コードのステップ実行を続行します。 ステップ インとは、
make_dot_string
など、デバッグ情報がある任意の関数呼び出しにデバッガーが入ることを意味します。make_dot_string
の中に一度入ると、そのローカル変数を確認し、そのコードを明確にステップ実行できます。ステップ インを使用してステップ実行を継続します。
make_dot_string
の終わりに到達すると、次のステップではfor
ループに戻ることに注意してください。このとき、s
変数には新しい戻り値があります。 再度print
ステートメントにステップ実行すると、print
に対するステップ インではその関数は開始されません。 これは、print
が Python ランタイムのネイティブ コードであり、Python に書き込まれていないためです。また
make_dot_string
の中に入るまで、ステップ インの使用を続けます。 次いで [ステップ アウト] を使用し、for
ループに戻ることを確認します。 ステップ アウトでは、デバッガーは関数の残りの部分を実行し、呼び出し元のコードで自動的に一時停止します。 これは、デバッグの対象の時間の長い関数の一部をステップ実行したときに便利です。 残りの部分をステップ実行し、呼び出し元のコードに明示的なブレークポイントを設定しません。次のブレークポイントに到達するまで、プログラムの実行を続けるには、[続行] (F5 キー) を使用します。
for
ループにブレークポイントを設定しているので、次のイテレーションで中断します。ループのイテレーションを何百回もステップ実行することは面倒なため、Visual Studio では、ブレークポイントに条件を追加できます。 これを使用すると、デバッガーは条件が満たされた場合のみ、ブレークポイントでプログラムを停止します。 たとえば、
for
ステートメントにブレークポイントがある条件を使用し、i
の値が 1600 を超えた場合のみ一時停止するようにできます。 この条件を設定するには、ブレークポイントの赤い点を右クリックして [条件] を選択します (Alt+F9>C)。 表示された [ブレークポイント設定] ポップアップで、式としてi > 1600
と入力し、[閉じる] を選択します。 F5 キーを押して続行し、次の改行までプログラムが多数のイテレーションを実行することを確認します。完了までプログラムを実行するには、余白のドットを右クリックし、[ブレークポイントの無効化] を選択して、ブレークポイントを無効にします (Ctrl+F9 キー)。 次いで [続行] を選択し (または F5 キーを押して)、プログラムを実行します。 プログラムが終了すると、Visual Studio は、デバッグ セッションを停止し編集モードに戻ります。 また、ブレークポイントを削除するには、そのドットを選択するか、ドットを右クリックして [ブレークポイントの削除] を選択します。 また、以前に設定したすべての条件も削除されます。
ヒント
Python インタープリター自体の起動に失敗した場合など、出力ウィンドウがごく短時間表示され、自動的に閉じてしまい、エラー メッセージが表示されない場合があります。 これが起こった場合、ソリューション エクスプローラーでプロジェクトを右クリックし、[プロパティ] の [デバッグ] タブを選び、[インタープリター引数] フィールドに -i
を追加します。 この引数により、プログラム完了後にインタープリターは対話モードになり、ユーザーが CCtrl+Z>Enter キーの順に押して終了するまで、ウィンドウは開いたままになります。
次のステップ
詳しい説明
- デバッグ
- 「Visual Studio でのデバッグ」では、Visual Studio のデバッグ機能が完全に説明されています。