最近のブラウザーで行われたコード最適化の副産物として、デバッグ中に、「実際に」スコープ内にあるすべての変数を「見る」ことはできません。これはよく知られており、SOに関する前の質問で対処されています。この機能は、確かに本番環境では便利ですが、開発中に私を悩ませますが、遅くなります(それは明らかです)。
今私の質問は、この動作をオフにする方法はありますか?構成ファイルを編集できますか、それともブラウザプラグインがありますか、それともブラウザ実行可能ファイルの「開発者向けの特別なビルドバージョン」がありますか?新しいコードを書いているとき、すぐにコードをコンソールに入力するのが好きなので、これは本当に私を悩ませています。
更新/編集
これは、部分的な解決策です。Paul1365972の功績です。
次のような特別なオプションを使用して、コマンドラインからChromeブラウザを起動する必要があります。
- Chromeを完全に閉じます
- コンソールからChromeを実行します
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
。これは、他のWindows OSと同様です。 - 開発者コンソールを開いて実行し
"%GetHeapUsage()"
ます。オプションを使用してChromeを適切に起動した場合、番号がコンソールに記録されます。それ以外の場合は、構文エラーが発生します。
このコマンドラインフラグを使用すると%
、で始まるコマンドを使用して「V8エンジンと通信」できます。これは、プレーンJavaScriptの構文エラーです。この種の使用可能なV8コマンドのリストは、Paulの回答に記載されています。
あり%NeverOptimizeFunction()
、私はちょうど呼び出すことと、それを使って行うことがあるだろうことのように見えたものですそのリスト、上。残念ながら、次のスクリーンショットに示すように、その関数は私が望んでいたことをしません。
(((Paulの回答からのもう1つのリンク(v8ネイティブノードモジュール)は、このコンテキストではここでは重要ではありません。コードがクラッシュしないように、「%」関数呼び出しを1行で囲むだけです。 v8ではないブラウザー)))
(((これが機能したとき(この最適化がまだ発明/実装されていないとき)を覚えています。10年前、15年前、そのようなものです。Chromeの最新バージョンは何ですか(もしそして、あなたができる最後のFirefoxバージョンは何でしたか(もっと確かにここにあります)?それはあなたに賞金をもたらすことはありませんが、もしあなたがたまたま知っていてそれを回答として投稿した場合、あなたは賛成票を得るでしょう。 。)))
ソリューション
PETR SRNICEKに感謝
新しい質問
ペトルのソリューションは多くのことを助けますが、完璧ではありません。この質問は長くなりすぎているので、Petrのソリューションをどのように改善できるかについて新しい質問を投稿しました。(もちろん、ここでこの質問を編集することもできますが、私が何を意味するのかを知っていれば、それは「歴史的でない」と感じるでしょう。)
v8-natives
ライブラリは、ちょうどべきであるシンプルなライブラリのコードで重要な%コールラップnoops
..特別--allow-原住民-構文フラグで開始されませんでしたブラウザやノード内を
%NeverOptimizeFunction(foo)
私がbodyOnloadでも呼び出しただけです。問題は、foo
私が望んでいた方法で最適化されていないことです。変数lorem
は見えません。関数fooに入るコードを書きたいとしましょう。テキストエディターに入力する代わりに、(デバッガーがfooに座っている間に)開発コンソールに入力し、期待どおりに機能するかどうかを確認してから、コンソールからテキストエディターにコピーして貼り付けます。それが私が働くのが好きな方法です。そしてできません。最適化のため。それを得る?
--js-flags
(いくつかのTurboFan関連のコマンドを含む)およびいくつかのV8ネイティブコマンドを実験するのに費やしましたが、希望の動作を達成できませんでした。このアプローチは行き止まりかもしれないと思います。[v8]
この質問にタグを追加することは価値があるかもしれません。V8の内部の仕組みを深く理解している人なら、これが正しい方法かどうかを明確にできるかもしれません。