2

次のばかげた例を考えてみましょう。

<!doctype html>
<meta charset="utf-8">
<title>dumb snippet</title>
<script>
var i = 0;
while (i < 100) {
    console.log(i);
    debugger;
    i += 1;
}
</script>

Google Chrome の DevTools を使用してこのコードを実行すると、デバッガーはdebuggerステートメントで実行を忠実に停止しますが、スクリプトをすぐに中止 (および再起動) する方法は見つかりませんでした。AFAICT、Ctrl-Rまたはを押すShift-Ctrl-Rと、ページをリロードするのではなく、単に実行が続行されます。

私が見つけた唯一の手段は明らかですが、不必要に不便です: タブ/ウィンドウを完全に削除し、新しいものを開きます。

Google Chrome DevTools は、ステートメントで停止したスクリプトをすぐに中止する方法を提供していますか?debugger

(答えがたまたま「いいえ」の場合は、回避策を投稿しないでください。たとえば、ループが終了するまで F-8 を押し続けるなど、多くの方法が考えられますが、これはもちろん機能しません。いずれにせよ、ここで興味があるのは、そのようなスクリプトを中止して再起動する「公式の」方法があるかどうかだけです。)

4

1 に答える 1

1

実行できますが、最初にコードを準備する必要があります。

Google Chrome Dev Tools でスクリプトの実行を停止する手順:

(1)グローバル変数を作成します。

var devquit=0;
$(document).ready({
    //the rest of your code

(2) 終了したい場所に、この変数のテストを挿入します。

//Lotsa code
if (devquit > 0) return false;

(3) 上記のテスト行またはその前でスクリプトの実行を一時停止する

(4) コンソールに切り替える

(5) タイプ:

> devquit
0
> devquit=1   <=== only this line is necessary
> devquit
1

(6) スクリプトの実行を継続します。スクリプトはreturn false、上記のステップ (2) からテストを実行すると、


ノート:

(A) このトリックはグローバル変数とオブジェクトで機能しますが、ローカル変数では機能しません。

(B) そのため、指定された値を持つ場合に false を返すグローバル変数またはオブジェクトがある場合は、既に実行中のコードでこのトリックを引き続き使用できます。

(C) ピンチの場合、javascript エラーの原因となる要素を DOM (要素タブ) から削除することもできます。たとえば、コードがあるとします。そのコード行の前var cartype = $('#cartype').val();に ID= を持つ要素を削除するとcartype、js はその行で壊れます。ただし、コードを再実行しようとすると、要素は引き続き失われます。上記のトリックにより、コードを無限に実行および再実行できます。


その他の注意事項:

(a) コードにブレークポイントを挿入しますdebugger;。行に単独で入力します。DevTools が開いている場合、スクリプトはその時点でデバッガーにジャンプします。DevTools が開かれていない場合、コードはステートメントを無視します。

(b) コードをデバッグするときに jQuery ライブラリにジャンプするのを避けたいですか? ブラックボックス化します。Chrome の場合はブラックボックスの手順を参照してください- または - Firefox の場合は


感謝の気持ち (訪問して賛成票を投じてください):

Google Chrome を使用した行ごとの Javascript デバッグ

Google Chrome でデバッグ中に JavaScript 変数の値を変更することは可能ですか?

于 2015-04-01T14:32:02.423 に答える