4.2 ブレークポイント
Breakpoints and Debugging
ブレークポイントは、JavaScriptの実行を特定の位置で一時停止させる機能。変数の値を確認したり、コードの実行フローを追跡したりできる。console.log()による原始的なデバッグより、はるかに効率的な問題解決が可能。
行ブレークポイント
最も基本的なブレークポイント。指定した行でコードの実行が停止する。
設定方法
操作手順
- Sourcesパネルでファイルを開く
- 停止したい行の行番号をクリック
- 青いマーカーが表示されればブレークポイント設定完了
ブレークポイントの管理
- 無効化: 行番号を右クリック → "Disable breakpoint"
- 削除: 青いマーカーをクリック、または右クリック → "Remove breakpoint"
- 一覧表示: Debuggerペインの「Breakpoints」セクション
条件付きブレークポイント
指定した条件がtrueの場合のみ停止するブレークポイント。
設定方法
操作手順
- 行番号を右クリック
- 「Add conditional breakpoint」を選択
- 条件式を入力(例:
i === 100) - Enterで確定
条件式の例
// 特定の値の時だけ停止
user.id === 42
// 特定の状態の時だけ停止
items.length > 100
// エラー状態の時だけ停止
response.status !== 200
// 特定の呼び出し回数で停止
++window.debugCounter === 10
ログポイント
条件式に
console.log(変数), false と書くと、停止せずにログだけ出力できる。実質的なログポイントとして使える。
ログポイント
実行を停止せずにConsoleにメッセージを出力する。コードを変更せずにログを追加できる。
設定方法
操作手順
- 行番号を右クリック
- 「Add logpoint」を選択
- 出力するメッセージを入力
- Enterで確定
メッセージの書式
// 変数の値を出力
'User:', user
// 複数の値を出力
'i =', i, 'total =', total
// オブジェクトを出力
'Response:', response
ログポイントはオレンジ色のマーカーで表示される。
DOMブレークポイント
DOM要素が変更された時に停止。詳細は2.1 DOM検査・編集を参照。
| 種類 | トリガー |
|---|---|
| Subtree modifications | 子要素の追加・削除・移動 |
| Attribute modifications | 属性の変更 |
| Node removal | 要素の削除 |
XHR/fetchブレークポイント
特定のURLへのリクエストが発生した時に停止。
設定方法
操作手順
- Debuggerペインの「XHR/fetch Breakpoints」セクション
- 「+」をクリック
- URLの一部を入力(空欄ですべてのリクエストに反応)
活用例
// APIエンドポイントへのリクエストで停止
/api/users
// 特定のパラメータを含むリクエストで停止
?page=
イベントリスナーブレークポイント
特定のイベントが発生した時に停止。
設定方法
操作手順
- Debuggerペインの「Event Listener Breakpoints」セクション
- カテゴリを展開(Mouse、Keyboard等)
- 監視したいイベントにチェック
主なイベントカテゴリ
| カテゴリ | イベント例 |
|---|---|
| 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ペイン
特定の式を監視リストに追加し、常に値を表示。
操作手順
- Watchペインの「+」をクリック
- 監視したい式を入力
- 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
[1] Pause your code with breakpoints - Chrome DevTools. developer.chrome.com
[2] Debug JavaScript - Chrome DevTools. developer.chrome.com