2017-12-01 3 views
2

私は、完了時にsetTimeout()で再キューする機能を持っています。 Chrome DevToolsが再帰的に呼び出しているように見える理由を説明できますか?私の理解は、コールスタックは各呼び出しで明確にすべきです。setTimeout()がChrome DevToolsで呼び出しスタックを乱すのはなぜですか?

Three main's on stack:私はこれを見るさらに3回反復した後

One main on stack

:ブレークポイントがヒットし

<html> 
    <head> 
    <script> 
     function main() { 
     setTimeout(main, 100); // set breakpoint here 
     } 
     main(); 
    </script> 
    </head> 
    <body></body> 
</html> 

初めて私はこれを参照してください。

は、この非常に簡単な例を見てみましょう

Firefoxの開発者ツールは私が期待していることを行い、ブレークポイントに達するたびにスタック上に関数のインスタンスを1つだけ表示します。

enter image description here

私は認識していないんだか、この単なるデベロッパーツールUIの事があるクロームの下で起こって微妙な参照キャプチャのいくつかの種類がありますか?

+1

これはdevtoolsのUIです。コールスタックの深さは1つだけですが、現在のコールがどこからエンキューされたかがわかります。これは、関数がなぜ動いているのか、それが呼び出されたコンテキストを追跡するのに便利です。 –

+0

ありがとう@FredStark。私はユーティリティを見ることができますが、私のプログラムが実行されるときにコールスタックリストが無限に成長するのを防止する方法はありますか? (非同期スタックトレースをオフにすることなく) – rkagerer

答えて

3

はそれを非表示にするには -
デベロッパーツール設定]に移動 - >設定 - >デバッガ
チェック「を無効に非同期スタックトレース」
しかし、私は強くあるとして、それを残すことをお勧めします。これはデバッグに非常に便利です。

+1

ありがとう。あなたがそれに答えたのと同じことを考えて、私はこれを自分で考え出しました!必要以上の6分後にあなたの答えを受け入れます。 – rkagerer

関連する問題