4.2 ブレークポイント

Breakpoints and Debugging

ブレークポイントは、JavaScriptの実行を特定の位置で一時停止させる機能。変数の値を確認したり、コードの実行フローを追跡したりできる。console.log()による原始的なデバッグより、はるかに効率的な問題解決が可能。

行ブレークポイント

最も基本的なブレークポイント。指定した行でコードの実行が停止する。

設定方法

操作手順

  1. Sourcesパネルでファイルを開く
  2. 停止したい行の行番号をクリック
  3. 青いマーカーが表示されればブレークポイント設定完了

ブレークポイントの管理

  • 無効化: 行番号を右クリック → "Disable breakpoint"
  • 削除: 青いマーカーをクリック、または右クリック → "Remove breakpoint"
  • 一覧表示: Debuggerペインの「Breakpoints」セクション

条件付きブレークポイント

指定した条件がtrueの場合のみ停止するブレークポイント。

設定方法

操作手順

  1. 行番号を右クリック
  2. 「Add conditional breakpoint」を選択
  3. 条件式を入力(例: i === 100
  4. Enterで確定

条件式の例

// 特定の値の時だけ停止
user.id === 42

// 特定の状態の時だけ停止
items.length > 100

// エラー状態の時だけ停止
response.status !== 200

// 特定の呼び出し回数で停止
++window.debugCounter === 10
ログポイント 条件式に console.log(変数), false と書くと、停止せずにログだけ出力できる。実質的なログポイントとして使える。

ログポイント

実行を停止せずにConsoleにメッセージを出力する。コードを変更せずにログを追加できる。

設定方法

操作手順

  1. 行番号を右クリック
  2. 「Add logpoint」を選択
  3. 出力するメッセージを入力
  4. Enterで確定

メッセージの書式

// 変数の値を出力
'User:', user

// 複数の値を出力
'i =', i, 'total =', total

// オブジェクトを出力
'Response:', response

ログポイントはオレンジ色のマーカーで表示される。

DOMブレークポイント

DOM要素が変更された時に停止。詳細は2.1 DOM検査・編集を参照。

種類 トリガー
Subtree modifications 子要素の追加・削除・移動
Attribute modifications 属性の変更
Node removal 要素の削除

XHR/fetchブレークポイント

特定のURLへのリクエストが発生した時に停止。

設定方法

操作手順

  1. Debuggerペインの「XHR/fetch Breakpoints」セクション
  2. 「+」をクリック
  3. URLの一部を入力(空欄ですべてのリクエストに反応)

活用例

// APIエンドポイントへのリクエストで停止
/api/users

// 特定のパラメータを含むリクエストで停止
?page=

イベントリスナーブレークポイント

特定のイベントが発生した時に停止。

設定方法

操作手順

  1. Debuggerペインの「Event Listener Breakpoints」セクション
  2. カテゴリを展開(Mouse、Keyboard等)
  3. 監視したいイベントにチェック

主なイベントカテゴリ

カテゴリ イベント例
Mouse click, mousedown, mouseup, mouseover
Keyboard keydown, keyup, keypress
Touch touchstart, touchend, touchmove
Load load, DOMContentLoaded, beforeunload
Timer setTimeout, setInterval, requestAnimationFrame
Script First Statement(スクリプト実行開始時)

例外ブレークポイント

例外(エラー)が発生した時に停止。

設定方法

  • Debuggerペイン上部の「Pause on exceptions」ボタン(⏸アイコン)をクリック

オプション

オプション 説明
Pause on caught exceptions try-catchでキャッチされた例外でも停止
Pause on uncaught exceptions キャッチされなかった例外で停止

ステップ実行

ブレークポイントで停止した後、コードを1行ずつ実行する。

操作 ショートカット 説明
Resume F8 次のブレークポイントまで実行を再開
Step over F10 次の行へ(関数呼び出しはスキップ)
Step into F11 関数の中に入る
Step out Shift+F11 現在の関数から出る
Step F9 次のステートメントへ(非同期も追跡)

Run to cursor

特定の行まで実行を進めたい場合:

  • 目的の行を右クリック → "Continue to here"

変数の監視

Scopeペイン

現在のスコープで利用可能な変数が表示される。

  • Local: ローカル変数
  • Closure: クロージャで参照している変数
  • Global: グローバル変数

Watchペイン

特定の式を監視リストに追加し、常に値を表示。

操作手順

  1. Watchペインの「+」をクリック
  2. 監視したい式を入力
  3. Enterで追加

監視式の例

// 変数の値
user.name

// 配列の長さ
items.length

// 計算結果
total * 1.1

// 条件式
status === 'active'

ホバーで値を確認

停止中に変数名にマウスをホバーすると、その値がツールチップで表示される。

Consoleで評価

停止中はConsoleで現在のスコープの変数にアクセスできる。

コールスタック

Call Stackペインには、現在の実行位置に至るまでの関数呼び出し履歴が表示される。

使い方

  • 各フレームをクリックすると、その関数のコードと変数が表示される
  • どの関数からどの関数が呼ばれたかを追跡できる

Restart frame

フレームを右クリック → "Restart frame" で、その関数の先頭から再実行できる。

Ignore List(無視リスト)

サードパーティライブラリのコードをステップ実行から除外。

設定方法

  • ファイルを右クリック → "Add script to ignore list"
  • Settings → Ignore List でパターンを追加

効果

  • Step intoでライブラリコードをスキップ
  • コールスタックで薄く表示される
  • 例外ブレークポイントで無視

デバッグのTips

debuggerステートメント

コード内にdebugger;を書くと、その位置でブレークポイントのように停止する。

function processData(data) {
    debugger; // ここで停止
    return data.map(transform);
}

ブラックボックス化したコードを一時的に見る

Call StackでIgnore Listのフレームを右クリック → "Stop ignoring"

非同期コードのデバッグ

async/awaitやPromiseのコードでも、ステップ実行で追跡可能。Call Stackには非同期境界が表示される。

Live expressions

Consoleの上部で式を常に評価し続ける機能。リアルタイムで値の変化を監視できる。

参考文献
[1] Pause your code with breakpoints - Chrome DevTools. developer.chrome.com
[2] Debug JavaScript - Chrome DevTools. developer.chrome.com