では、非同期処理(Promise / async/await)のステップ実行を、VSCodeデバッガで体験する例を、初心者向けに手順付きで進めていきます。
1. サンプルコードを作る
まず小さな非同期処理のファイルを作ります。
📄 async_debug.js
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function fetchData() {
console.log("fetchData: 開始");
await wait(1000); // 1秒待機
console.log("fetchData: データ取得完了");
const data = { value: 42 };
return data;
}
async function main() {
console.log("main: 開始");
const result = await fetchData();
console.log("main: 結果は", result);
console.log("main: 終了");
}
main();
JavaScript2. VSCode 側でブレークポイントを置く
ステップ実行のために以下の行にブレークポイントを置きます:
console.log("fetchData: 開始");await wait(1000);console.log("fetchData: データ取得完了");const result = await fetchData();(main内)
赤い丸をクリックしてブレークポイントを置きます。
3. デバッグ実行
- VSCode 左サイドバーの「実行とデバッグ」を開く
- 「launch.json」がない場合は作成 → Node.js を選択
- デバッグ設定で
"program": "${workspaceFolder}/async_debug.js"にする - 「▶️デバッグ開始」をクリック
4. ステップ実行で体験
VSCode でブレークすると、ステップ実行(F10/F11)が可能です:
| 操作 | 説明 |
|---|---|
| F10 (Step Over) | 1行ずつ実行(関数呼び出しは中に入らない) |
| F11 (Step Into) | 関数の中に入ってステップ実行 |
| Shift+F11 (Step Out) | 現在の関数を最後まで実行して戻る |
| ▶️ Continue | 次のブレークポイントまで実行 |
🔍 ポイント
await wait(1000)の行で一時停止したときは、非同期が再開されるまでデバッグは停止
→ 「Promise が解決されるタイミング」で次の行に進む- 「変数ペイン」で
resultがまだ未定義なのが確認できる - 次に
console.log("fetchData: データ取得完了");が実行されたら、Promise が解決されたことがわかる
5. コールスタック(stack)の確認
非同期関数の場合、VSCode の「コールスタック」ペインには async stack が表示されます:
main
at async fetchData
at async main
- どの関数が呼ばれた結果、現在の行に到達したかが分かる
- 非同期でも、同期関数と同じように順序を追える
6. Promise チェーンの場合も同様にデバッグできる
function asyncTask(name, ms) {
return new Promise(resolve => setTimeout(() => {
console.log(`${name} 完了`);
resolve(name);
}, ms));
}
asyncTask("A", 500)
.then(resultA => asyncTask("B", 500))
.then(resultB => console.log("最終結果:", resultB));
JavaScript.then()内でブレークポイントを置くと、非同期チェーンの流れも追える- DevTools と違い、VSCode デバッガはステップ実行可能なので「どの Promise がどの順番で解決されたか」を目で確認できる
7. デバッグ体験のコツ
- await の行で止める → 非同期が再開されるタイミングを体験
- 関数の中で Step Into → async 関数内部もステップ実行可能
- 変数ペインで値を確認 → Promise が解決される前は undefined / pending
- コールスタックを追う → 非同期でも呼び出し順が分かる
- コンソールで式を評価 → デバッグ中に
result.valueなどを確認できる
まとめ
- VSCode のデバッガは 非同期処理もステップ実行可能
awaitの行で止めると、非同期処理がどのタイミングで完了するか目で見える- コールスタックを確認すると、async stack trace を理解できる
- Promise チェーンや async/await の非同期エラーも同じ手順で追跡できる
💡 次のステップとしては:
- 非同期処理のエラーを try/catch で捕まえてステップ実行
- 複数の await / Promise が絡む場合のデバッグ方法
を体験すると、実務での非同期バグ解決力が格段に上がります。


