VScode や Chromeのデバッグ機能を使うときに
「これってどれがどういう意味なんだっけ・・」ってなるのでメモ。
違い
- ステップイン
→関数parent
の中にいて、今いる行が関数child();
のとき、関数child
の中に入っていく
- ステップアウト
→関数parent
の中にいるとき、関数parent
を抜けるまで処理をすすめる
- ステップオーバー
→関数parent
の中にいて、今いる行が関数child();
のとき、関数child
の中に入らず次の行に行く
たとえば、以下のようなJSファイルがあるとして、🥚の行でブレークポイントを設定して停止したとします。
function main() { console.log("main: start"); parent(); console.log("main: end"); } function parent() { console.log("parent: start"); child(); //🥚ブレークポイント console.log("parent: end"); } function child() { console.log("child: start"); console.log("child: end"); } main();
停止後に
- ステップアウト🐉
- ステップオーバー🦅
- ステップイン🐔
すると、それぞれ以下の行まで処理が進みます。
function main() { console.log("main: start"); parent(); console.log("main: end"); //🐉ステップアウトするとここまで進む } function parent() { console.log("parent: start"); child(); //🥚ブレークポイント console.log("parent: end"); //🦅ステップオーバーするとここまで進む } function child() { console.log("child: start"); //🐔ステップインするとここまで進む console.log("child: end"); } main();
- ステップアウトすると・・・
→今いるparent()を抜けるまで処理を続ける。結果、main()の呼び出し元まで戻る。
- ステップオーバーすると・・・
→child()の中には入らずに、同じ関数内の次の行console.log("parent: end");
に行く。
- ステップインすると・・・
→child()の中に入っていく。
記号の意味
👆の理解をしてから、それぞれのアイコンを見てみると、なんとなく意味がわかるようになります。
ステップオーバーは、矢印が点を飛び越してる。
ステップインは、点の中に矢印が入っていってる。
ステップアウトは、点の外側に矢印が出ていってる。
ここでいう「点」を「今いる行」に置き換えると、個人的にはしっくりきた感があります🤔
ステップ と ステップイン
Chromeの場合は、👆の3つ以外に「ステップ」というボタンもあります。
この「ステップ」は、JavaScript限定のようなデバッグ機能らしく、以下のような意味があるらしいです👇
“ステップ” コマンドは、後で実行される
setTimeout
(スケジューリングされた関数呼び出し) のような非同期アクションを無視することに注意してください。“ステップイン” はそれらのコードに入り、必要に応じてそれらを待ちます。
たとえば、以下のようなコードがあって、🥚の行でブレイクポイントを設定して停止したとします。
function main() { console.log("main: start"); setTimeout(cb,3000); //🥚ブレークポイント console.log("main: end"); } function cb(){ console.log("main: setTimeout"); }
停止後、それぞれ
- ステップ🟣
- ステップイン🟠
すると、以下のようになります。
function main() { console.log("main: start"); setTimeout(cb,3000)//🥚ブレークポイント console.log("main: end"); // 🟣ステップするとここまで進む } function cb(){ console.log("main: setTimeout"); // 🟠ステップインするとここまで進む }
- 「ステップイン」だと・・・
→3秒後に cb() が実行されるまで処理を飛ばします。
なので、🟣の行はスキップされて、3秒後に実行される🟠の行でストップします。
- 逆に「ステップ」だと・・・
→非同期処理は考慮されないので、🟣の行で止まりますし、3秒経っても🟠の行でストップしません。
おわり
コメント
死ぬほどどうでもよくて申し訳ないんですけど、🖕の絵文字は👆とは違う指です…
とても有用な指摘ありがとうございます。今まで意識してませんでした。。
🖕だと中指立ててる感じになっちゃってますね。👆じゃないとダメなのに。。
というか仕事とかでも普通に🖕を使っちゃってました。最悪だーーー
(あと絵文字が打てないようになっててすみません!絵文字を打てるように修正しました!)
とても有用な指摘ありがとうございます。今まで意識してませんでした。。
🖕だと中指立ててる感じになっちゃってますね。👆じゃないとダメなのに。。
というか仕事とかでも普通に🖕を使っちゃってました。最悪だーーー
(あと絵文字が打てないようになっててすみません!絵文字を打てるように修正しました!)
すみません、タイポで混乱します、、
ステップインは、点の外側に矢印が出ていってる。
⇨ステップアウトは、点の外側に矢印が出ていってる。
ありがとうございます!修正しました!