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のインストール方法(Windows/Mac対応)手順と注意点
- 関連記事:Pythonのバージョンの確認方法(Windows/Mac対応)
- 関連記事:VSCodeでPython開発を最適化するおすすめ拡張機能10選(2025年版)
インストールのチェック
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 # 例
- 関連記事:Pythonの仮想環境(venv)でプロジェクトごとに環境を分ける方法
- 関連記事:【Windows/Mac対応】 Python仮想環境のactivateとdeactivate
- 関連記事:requirements.txtで一括インストールする手順(pip install -r)
- venv — Python 3.13.7 ドキュメント
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
- 関連記事:関数の基本(def): 書き方と基本的な使い方
- 関連記事:if name == “main”:とは?実行時だけ動かす処理について解説
- 関連記事:例外(Exception)入門: 実行時エラーの正しい理解
- 例外 — ZeroDivisionError — Python 3.13.7 ドキュメント
実行とデバッグビューを開く(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 == 0count == 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に出力されるログポイントのメッセージもここに表示されます。
- 関連記事:for文を置き換えるリスト内包表記の使い方とコツ
- 関連記事:辞書内包表記/セット内包表記に入門する
例外で中断(Exception Breakpoints)を有効化
ねらい
エラー発生箇所で自動停止し、原因を即座に観察するために使います。
print()では追いにくい、例外直前の状態を確実に確認できます。
設定方法
BreakpointsビューのEXCEPTIONSから:
Raised Exceptions: 捕捉される(try-exceptされる)例外が投げられた瞬間に停止Uncaught Exceptions: 捕捉されなかった例外が伝播して終了する直前に停止
本サンプルではreciprocalでZeroDivisionErrorが発生した瞬間に止めたいのでRaised Exceptionsを有効にします。
外部ライブラリの内部で大量に例外が発生する場合は、過度な停止になることがあるため、必要に応じて限定的に使いましょう。
- 関連記事:try-exceptでエラーでも止まらない処理の書き方を解説
- 関連記事:PythonのTracebackの読み方と直し方: エラーメッセージについて解説
- pdb — Python 3.13.7 ドキュメント
まとめ
VSCodeのデバッガは、ブレークポイント、ステップ実行、変数の観察、例外での自動停止など、バグの原因に素早く到達するための仕組みが一通り揃っています。
本記事では自動構成での起動(F5)から、条件付きブレークポイント、ログポイント、Call Stack、Watch/Variables/Debug Consoleの基本的な使い方を段階的に確認しました。
まずはサンプルコードで挙動に慣れ、日々の開発コードでも「止めて観察する」デバッグの習慣を取り入れてみてください。
print()に頼らずとも、再現性の高い問題解析ができるようになります。
- 関連記事:VSCode不要: Python標準のbreakpoint()で手早くバグ特定
- 関連記事:pytestでテスト効率化: Pythonの書き方パターン10選と失敗回避
- 関連記事:自動整形と静的チェック(Black/flake8/isort)設定入門
- breakpoint() — Python 3.13.7 ドキュメント
