VSCodeのデバッガは、プログラムを止めて中身をのぞきながら原因を探せる強力なツールです。
本記事ではPython初心者の方でも迷わないように、VSCode標準の「Run and Debug」を使って、ブレークポイントの設定、ステップ実行、変数ウォッチ、例外での中断までを順を追って丁寧に解説します。
print()デバッグから、正確で再現性のあるデバッグへステップアップしましょう。
VSCodeでPythonデバッグを始める準備
必要なもの(Python/VSCode/Python拡張)
概要
Pythonのデバッグを開始するには、以下の3点が必要です。
どれも無料で準備できます。
特にVSCodeのPython拡張は必須です。
- Python本体(3.8以上を推奨)
- Visual Studio Code(最新版)
- VSCode拡張機能「Python」(Microsoft製)

インストールのチェック
Pythonはターミナルでpython --version
またはpython3 --version
を実行して確認します。
VSCodeの拡張は拡張ビューからPythonを検索し、Microsoftのものをインストールします。
拡張のインストール後はVSCodeの再起動を行うと認識が安定します。
Pythonインタープリタを選ぶ(venv可)
venvを作る
プロジェクトごとに環境を分けると依存関係が衝突しにくくなります。
標準のvenv
で仮想環境を作成しましょう。
# 例: カレントディレクトリに .venv を作る
python -m venv .venv
# Windows: 仮想環境を有効化
.venv\Scripts\activate
# macOS/Linux: 仮想環境を有効化
source .venv/bin/activate
# 必要なパッケージがあればここで pip install
pip install requests # 例
VSCodeでインタープリタを選択
VSCode左下のステータスバーに表示されるPython 3.x
部分をクリックし、.venvのインタープリタを選びます。
見当たらない場合はコマンドパレットでPython: Select Interpreter
を実行します。
デバッグは選択中のインタープリタで実行されるため、ここは最初に確認しておきます。
サンプルコードを用意(簡単な関数)
サンプルのねらい
次のサンプルは、複数の関数呼び出し(ステップイン/アウトの練習)と、ゼロ除算の例外(例外で中断の練習)、条件付きブレークポイントやログポイントに適した変数(インデックスと値)を含みます。
以下のdebug_sample.py
を作成します。
# debug_sample.py
# 目的:
# - ステップ実行(F10/F11/Shift+F11)の練習
# - 条件付きブレークポイント(例: v == 0)
# - ログポイント(ループ中の変数を出力)
# - 例外で中断(ZeroDivisionError を Raised/Uncaught で止める)
from typing import List, Optional
def reciprocal(x: float) -> float:
# 0 のときは ZeroDivisionError が発生
return 1 / x
def to_reciprocals(values: List[float]) -> List[Optional[float]]:
result: List[Optional[float]] = []
for i, v in enumerate(values):
try:
r = reciprocal(v) # ここにブレークポイントを置くと効果的
except ZeroDivisionError:
# 例外は捕捉するが、Raised Exceptions を有効にすると raise 直後に止まれる
r = None
result.append(r)
return result
def average_non_none(values: List[Optional[float]]) -> float:
total = 0.0
count = 0
for v in values:
if v is None:
continue
total += v
count += 1
# count が 0 のときは ZeroDivisionError になる(例外で中断の練習に使える)
return total / count
def main() -> None:
nums = [2, 1, 0, -4] # 0 を含むので例外が発生するケースあり
recips = to_reciprocals(nums)
print("recips:", recips)
avg = average_non_none(recips)
print("average:", avg)
if __name__ == "__main__":
main()
実行結果(通常実行時の標準出力の例):
recips: [0.5, 1.0, None, -0.25]
average: 0.4166666666666667
実行とデバッグビューを開く(Run and Debug)
開き方
アクティビティバーのRun and Debug
アイコンを開くか、ショートカットCtrl+Shift+D
(macOSはCmd+Shift+D
)でデバッグビューを開きます。

画面構成の理解
左ペインにVariables、Watch、Call Stack、Breakpointsが並び、下部にDebug Consoleが現れます。
これらがデバッグの主要ツールです。
構成は自動でOK(launch.jsonは不要)
自動構成を使う
実行とデバッグをクリックし、デバッグドロップダウンでPython File
を選べば、launch.jsonを作らずにそのままデバッグ開始できます。


複雑な設定が必要になるまでは、この自動構成で十分です。
設定ファイルの書き方で悩む前に、まずはF5で動かしてみるのがおすすめです。
ブレークポイントの置き方とデバッグ開始
行番号横をクリックしてブレークポイント設定
手順
エディタの行番号左の余白をクリックすると赤い丸(ブレークポイント)が付きます。

サンプルではr = reciprocal(v)
の行に置くと、ループ中に都度停止して確認できます。

ブレークポイントで停止中は、画像の上部にあるようなボタンが表示されます。
- Continue (再開)
F5
– プログラムを次のブレークポイントまで実行する。 - Step Over (ステップオーバー)
F10
– 次の行を実行し、関数呼び出しの中には入らない。 - Step Into (ステップイン)
F11
– 関数呼び出しの中に入って実行を進める。 - Step Out (ステップアウト)
Shift + F11
– 現在の関数の残りを実行して呼び出し元に戻る。 - Restart (再起動)
Ctrl + Shift + F5
– デバッグセッションを最初からやり直す。 - Stop (停止)
Shift + F5
– デバッグセッションを強制終了する
1行ずつデバッグしていきたい場合、ステップオーバーを繰り返すと、どの用に処理が行われているのか視覚的にわかるので、デバッグ初心者にはおすすめです。
F9
でトグルも可能です。
補足
ブレークポイントは複数置けます。また、デバッグ中に新しいブレークポイントを置くことも可能です。
Breakpointsビューで一覧管理でき、チェックで有効/無効を切り替えられます。
デバッグ開始(F5)と停止
開始と停止
デバッグはF5
で開始、Shift+F5
で停止します。
macOSでファンクションキーが効かない場合はfnキー併用やキーバインドの確認を行ってください。
初回の挙動
初回は「Python File」選択ダイアログが出る場合があります。
選択後はデバッガが起動し、最初のブレークポイントで停止します。
実行の再開(Continue)と一時停止
使い分け
停止中にF5
(Continue)で次のブレークポイントまで進みます。
逆に実行中に一時停止したいときは、デバッグツールバーのPauseボタンを押します。
意図しない無限ループを疑うときの強力な手段です。
条件付きブレークポイント(特定の値で止める)
設定方法
赤い丸を右クリックしてEdit Breakpoint
またはAdd Conditional Breakpoint
を選び、条件式を入力します。
Pythonではi == 2
やv == 0
などが使えます。
条件がTrueになった時だけ停止するので、長いループの検証に有効です。
ヒント
条件式には任意の式が書けますが、副作用のある関数呼び出しは避けるのが安全です。
ログポイント(止めずにログ出力)
使い方
余白を右クリックしてAdd Logpoint
を選び、ログメッセージを入力します。
例:i={i}, v={v}
。
ログポイントは実行を止めずにDebug Consoleに値を出力します。
print()を書き換える必要がなく、後始末も不要です。
注意点
ログポイントのメッセージ内では{変数名}
で現在のローカル変数を参照できます。
重い処理を多数のループでログ出力すると実行が遅くなる点には注意します。
ステップ実行の基本操作(Python)
ショートカット早見(主要のみ)
操作 | キー(既定) | 説明 |
---|---|---|
続行(Continue) | F5 | 次のブレークポイントまたは終了まで進む |
停止(Stop) | Shift+F5 | デバッグを終了 |
ステップオーバー | F10 | 現在行を実行し、同じフレームで次行へ |
ステップイン | F11 | 関数呼び出しの中へ入る |
ステップアウト | Shift+F11 | 現在の関数を最後まで実行し、呼び出し元へ戻る |
MacではFnキー設定により挙動が異なるため、必要に応じてキーボード設定またはキーバインドを確認してください。
ステップオーバー(F10)
使いどころ
関数の中身には入らずに次へ進みたいときに使います。
例えばto_reciprocals
内のresult.append(r)
など、標準関数の詳細を追わない場面で便利です。
ステップイン(F11)
使いどころ
呼び出し先の関数内部で何が起きているか確認したいときに使います。
r = reciprocal(v)
でF11を押すとreciprocal
関数に入れます。
ここでv
が0なら、ゼロ除算が起きる行を目視で確認できます。
ステップアウト(Shift+F11)
使いどころ
呼び出し先まで追いかけたけれど、もう呼び出し元へ戻りたいときに使います。
reciprocal
に入った後、Shift+F11でto_reciprocals
の次行に戻れます。
コールスタック(Call Stack)の見方
基本
Call Stackビューには現在の呼び出し階層が表示されます。
例として、main → to_reciprocals → reciprocal
のように並びます。
任意のフレームをクリックすると、その時点のローカル変数がVariablesビューに表示され、該当ソースへジャンプできます。
変数の確認とウォッチ
変数にホバーして値を確認
使い方
停止中は、エディタ上でv
やr
などにマウスを重ねるとポップアップで現在値が見えます。
コードをスクロールせず素早く値を確認できるため、ループ内の確認に便利です。
Variablesビューでリスト/辞書を展開
使い方
左ペインのVariablesでは、ローカル/グローバル変数が階層表示されます。
リストrecips
を展開すると、[0]: 0.5
のように各要素が見えます。
深い入れ子の辞書でもドリルダウンでき、データ構造の把握に役立ちます。
Watchに式を追加(例:x>0)
使い方
Watchビューの「+」から式を追加します。
例:
v == 0
、i % 2 == 0
count == 0
、total / max(count, 1)
など
ステップを進めるたびに自動評価され、変化を追いやすくなります。
副作用を持つ関数呼び出しは避けるのが原則です。
デバッグコンソールで式を評価
使い方
Debug Consoleでは現在のフレームの文脈でPython式を評価できます。
例:
recips
[x for x in recips if x is not None]
sum(x for x in recips if x)
一時的な検証や軽微な仮説検証に最適です。
Consoleに出力されるログポイントのメッセージもここに表示されます。
例外で中断(Exception Breakpoints)を有効化
ねらい
エラー発生箇所で自動停止し、原因を即座に観察するために使います。
print()では追いにくい、例外直前の状態を確実に確認できます。
設定方法
BreakpointsビューのEXCEPTIONS
から:
Raised Exceptions
: 捕捉される(try-exceptされる)例外が投げられた瞬間に停止Uncaught Exceptions
: 捕捉されなかった例外が伝播して終了する直前に停止
本サンプルではreciprocal
でZeroDivisionError
が発生した瞬間に止めたいのでRaised Exceptionsを有効にします。
外部ライブラリの内部で大量に例外が発生する場合は、過度な停止になることがあるため、必要に応じて限定的に使いましょう。
まとめ
VSCodeのデバッガは、ブレークポイント、ステップ実行、変数の観察、例外での自動停止など、バグの原因に素早く到達するための仕組みが一通り揃っています。
本記事では自動構成での起動(F5)から、条件付きブレークポイント、ログポイント、Call Stack、Watch/Variables/Debug Consoleの基本的な使い方を段階的に確認しました。
まずはサンプルコードで挙動に慣れ、日々の開発コードでも「止めて観察する」デバッグの習慣を取り入れてみてください。
print()に頼らずとも、再現性の高い問題解析ができるようになります。