2012-06-20 28 views
7

私は様々な情報源をオンラインで探し、いくつかのGoogle検索を行ってきましたが、どのように作業するかに関する具体的な指示は見つけられませんGoogle ChromeのV8 --trace- *フラグを使って私はいくつかの "あなたもChromeでこれを行うことができます"と見ましたが、私が探しているものを見つけることができませんでした。これは次のように出力されます:(スニペットはポストの近くにあります) Optomizing for V8Google Chromeで--js-flagsを使用して出力を得る -

データがファイルに記録されていることがわかりました:Profiling Chromium with V8このファイルの名前はv8.logです(リンクが失われています)。しかし、どのように生成するかについての手がかりは見つかりませんでしたそのファイル、またはそのファイルの場所を示します。クロムディレクトリやユーザーディレクトリには表示されませんでした。

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

V8をビルドしてシェルを使用するのとは対照的に、ChromeのV8を使用する理由は、私がテストしたいJavaScriptがDOMを使用するためです。私はV8シェルには含まれないと考えています。しかし、それが知っていると素晴らしいと思うなら、sans-htmlファイルとテストを実行するコードを書き直すことができます。しかし、私の推測では、V8自体がnode.jsのようなsans-DOMアクセスであるということです。

Windows 7のショートカットのターゲットは

  • "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は、出力のthisタイプは、ログは次のようになり、クロム
    • もしそうなら、からログインできるかどうかを探している
    • 究極のx64上でGoogle Chromeのカナリアを実行

      • もしそうでなければ、どんな種類の出力を期待しなければならないでしょうか、どこで見つけることができますか?

    どのような援助をありがとう!私は以下の回答を使用して、私のため

    を動作させるの答えを得た方法で改正

    は、私はデフォルトのディレクトリのITへのpythonをインストールし、それがクロムへの完全なパスを持っていたようにスクリプトを変更しました。そこからファイルタイプの関連付けを.pyファイルに設定してPythonに渡し、スクリプトを実行しました。今ではChrome Canaryを開くたびにPythonスクリプトが実行されます(少なくともパソコンを再起動するまで、スクリプトを再実行する必要があります)

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

  • 答えて

    10

    Windowsでは、stdoutの出力は、chrome.exeがGUIアプリケーションであるという事実によって抑制されています。 V8がstdoutに出力する内容を確認するには、IMAGE_SUBSYSTEM_WINDOWS_GUIからWINDOWS_SUBSYSTEM_WINDOWS_CUIまでのPEヘッダーのSubsystemフィールドを反転する必要があります。

    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) 
    

    すべて閉じクロームのインスタンスをして、このスクリプトを実行します。

    次の(ややハック)Pythonスクリプトでそれを行うことができます。 chrome.exeを再起動すると、コンソールウィンドウが表示され、>でstdoutをリダイレクトできるはずです。

    +0

    私は、Pythonについて非常に精通してないんだけど、 '経由でスクリプトを実行している "C:\ Python27 \ python.exe" chromeDebug.py'は例外IOErrorを与えます:' IOError:[Errno 2]そのようなファイルやディレクトリはありません: 'chrome.exe'です。解決策は "chrome.exe"を完全なパスに変更することですか? – ArkahnX

    +0

    はい、chrome.exeへのフルパスを指定しませんでした。 chrome.exeが置かれているのと同じディレクトリで実行するだけです。 –

    +0

    (管理者として実行中)Chromeの隣にあるファイル "bastard.py"に入れますが、 トレースバック(最新の最後の呼び出し): ファイル "bastard.py"、行8、 open( " "chrome.exe"、 "r + b")f: IOError:[Errno 13]許可が拒否されました: 'chrome.exe' – Pawel

    4

    もしあなたがクロムのPEエントリーをハッキングすることに熱心でないなら、ウィンドウの代わりがあります。

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

    マイクロソフトではDebugViewというツールを使用して、必要に応じてログファイルを監視します。

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

    +1

    それを動作させるために何をしなければならないかを段階的に説明できますか?私は+ R '' C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe "を獲得しようとしました" - js-flags = " - trace-opt --trace-deopt" 'そして、 debugview.exeを実行しましたが、出力を見るために次に何をすべきかわかりません。 – qbolec

    +0

    dbgviewを使用すると、 'chrome.exe --no-sandbox --user-data-dir = c:\ temp --js-flags =" - trace-opt --trace-deopt "と動作しますが、 dbgviewはstdoutの出力と比較して非常に不完全です。いくつかの変数置換データがメッセージにないようです。 –

    関連する問題