9

オンラインでさまざまなソースを調べて、いくつかのGoogle検索を実行しましたが、GoogleChromeでV8--trace-*フラグを操作する方法に関する具体的な手順が見つからないようです。「Chromeでもこれを実行できます」をいくつか見ましたが、探しているものが見つかりませんでした。次のように出力されます:(スニペットは投稿の下部近くにあります)V8に最適化

データがファイルに記録されているという参照を見つけました:V8でのChromiumのプロファイリングとファイルの名前がv8.logである可能性が高いことがわかりました:(そのリンクを失いました)しかし、それを生成する方法についての手がかりは見つかりませんでしたファイル、またはそれが配置されている場所。chromeディレクトリまたはuserディレクトリにあるようには見えませんでした。

どうやら私はchrome.dllの.mapファイルも有効にする必要がありますが、それを助けるものを見つけることができませんでした。

V8をビルドしてシェルを使用するのではなく、ChromeのV8を使用することを好む理由は、テストしたいJavaScriptがDOMを使用しているためです。これは、V8シェルに含まれるとは思われません。ただし、そうであれば、それを知っておくとよいでしょう。コードを書き直して、sans-htmlファイルを機能させてテストすることができます。しかし、私の推測では、V8自体はnode.jsのようなsans-DOMアクセスです

要約すると、

  • Windows 7Ultimatex64でGoogleChromeCanaryを実行する
  • ショートカットターゲットは"C:\Users\ArkahnX\AppData\Local\Google\Chrome SxS\Application\chrome.exe" --no-sandbox --js-flags="--trace-opt --trace-bailout --trace-deop" --user-data-dir=C:\chromeDebugProfile
  • このタイプの出力をChromeからログに記録できる かどうかを探しています
    • もしそうなら、ログはどこにありますか?
    • そうでない場合、どのような出力を期待する必要がありますか?また、どこでそれを見つけることができますか?

助けてくれてありがとう!

私が私のために働くための答えを得た方法で修正する

以下の回答を使用して、Pythonをデフォルトのディレクトリにインストールし、Chromeへのフルパスを持つようにスクリプトを変更しました。そこから、ファイルタイプの関連付けを.pyファイルからpythonに設定し、スクリプトを実行しました。これで、Chrome Canaryを開くたびに、そのpythonスクリプトが実行されます(少なくともPCを再起動するまでは、そのスクリプトを再度実行する必要があります)

結果はまさに私が探していたものです!

4

2 に答える 2

12

Windowsでは、chrome.exeがGUIアプリケーションであるため、stdoutの出力が抑制されます。V8がstdoutに出力する内容を確認IMAGE_SUBSYSTEM_WINDOWS_GUIするには、PEヘッダーのサブシステムフィールドをからに反転する必要があります。WINDOWS_SUBSYSTEM_WINDOWS_CUI

次の(ややハックっぽい)Pythonスクリプトでそれを行うことができます。

import mmap
import ctypes

GUI = 2
CUI = 3

with open("chrome.exe", "r+b") as f:
   map = mmap.mmap(f.fileno(), 1024, None, mmap.ACCESS_WRITE)
   e_lfanew = (ctypes.c_uint.from_buffer(map, 30 * 2).value)
   subsystem = ctypes.c_ushort.from_buffer(map, e_lfanew + 4 + 20 + (17 * 4))
   if subsystem.value == GUI:
       subsystem.value = CUI
       print "patched: gui -> cui"
   elif subsystem.value == CUI:
       subsystem.value = GUI
       print "patched: cui -> gui"
   else:
       print "unknown subsystem: %x" % (subsystem.value)

すべてのChromeインスタンスを閉じて、このスクリプトを実行します。chrome.exeを再起動すると、コンソールウィンドウが表示され、を介してstdoutをリダイレクトできるようになります>

于 2012-06-20T19:43:00.030 に答える
5

ChromeのPEエントリをハッキングすることに熱心でない場合は、Windowsの代替手段があります。

ChromeアプリはWindows上にコンソールstdoutを作成しないため、v8(d8コンパイラも)のすべてのトレースが代わりにOutputDebugStringに送信されます。OutputDebugStringは、他のアプリケーションで読み取ることができる共有メモリオブジェクトに書き込みます。

Microsoftには、DebugViewと呼ばれるツールがあり、監視し、必要に応じてログファイルにストリーミングします。

DebugViewは無料で、Microsoftからダウンロードできます:http ://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

于 2013-11-17T17:59:51.660 に答える