2012-10-10 15 views
24

無限ループまたは再帰呼び出しの場合、基本的にブラウザは何か(ChromeまたはFFのいずれか)に応答しなくなります。ログを見ることができず、デバッガに入ることができず、コンソール自体を開くこともできません。ブラウザは単にフリーズします。これはとても迷惑です。それは私がここに座って私の頭を傷つけること以外何もできないようだ...誰もこれを解決する方法について光を当てることができますか?Javascriptで無限ループや再帰呼び出しに入ると、javascriptをデバッグする方法は?

+3

ループが開始される前にデバッガにブレークポイントを設定しますか? – PhonicUK

+0

@PhonicUKは動作しません..... – lkahtz

答えて

44

もう1つのトリックは、Chromeのウェブ開発ツールを開いて、ブラウザが明らかにハングアップしたときにポーズを試すことです。それから、現在実行中の行で壊れます。いくつかのステップで、あなたはこれの底に達するべきです。

あなたが知っている(または疑わしい)と仮定すると、infiteループは、あなたがこのようなコードを追加することができ起こる機能:

var calls = 0; 
function iSuspectToBeLoopingInfititely() { 
    calls += 1; 
    if (calls > 100) { debugger; } 
} 

方法は100回呼び出された後これは、ChromeでJavaScriptデバッガを停止します。 注:デベロッパーツールのウィンドウを開いている場合は、Chromeはdebugger;の呼び出しでのみ切断されます。

+1

ありがとう、@Tigraine。これは動作します! – lkahtz

+2

良い答え。 'pause'ボタンを使用することは決して考えられませんでした(高いCPU負荷を引き起こしたバグを再現するのが難しい) –

+2

私はこの回答に戻っていきます。 1秒あたりの実行回数に任意の時計を設定し、違反する機能を無効にすると、ブラウザ開発ツールにとって優れた機能となります。 – Barney

0

Chromeで問題が発生しましたが、ブラウザウィンドウの[Paused in debugger]に表示されますが、ChromeがループしていたときにChromeが混乱していた場所を確認できませんでした... Firefoxでは、 30秒後にポップアップが表示され、ファイルと一般的な行を凍結してさらにデバッグし、その領域の周りにブレークポイントを設定することができます。

-2

次のコードを使用して、無限ループを停止できます。

debugger;

関連する問題