2012-06-20 70 views
7

我已經通過各種網絡資源查看並完成了一些谷歌搜索,但我似乎無法找到任何關於如何工作的具體說明在Google Chrome中使用V8 --trace- *標誌。我已經看到了一些「你可以在Chrome中做到這一點」,但我一直無法找到我在找什麼,這是這樣輸出的:(片段靠近帖子的底部) Optomizing for V8在谷歌Chrome瀏覽器中使用--js標誌來獲取 - 跟蹤輸出

我發現數據記錄到一個文件的參考:Profiling Chromium with V8,我發現該文件可能命名爲v8.log:(丟失該鏈接),但我還沒有找到任何線索如何生成該文件或它所在的位置。它沒有出現在chrome目錄或用戶目錄中。

顯然我需要爲chrome.dll啓用.map文件,但我無法找到任何幫助我的東西。

我寧願使用Chrome的V8,而不是構建V8和使用shell,這是因爲我想測試的JavaScript使用DOM,我不相信它會包含在V8 shell中。但是,如果是這樣,那將是很好的知道,那麼我可以重寫代碼工作sans-html文件和測試。但我的猜測是,V8本身就是sans-DOM訪問,就像node.js

所以總結一下;

  • 在Windows 7旗艦版64位
  • 快捷方式目標是"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類型的輸出可以從鉻
    • 如果是這樣,哪裏會日誌中記錄運行谷歌Chrome瀏覽器Canary ?
    • 如果不是,我應該期待什麼樣的輸出,並且我又能在哪裏找到它?

謝謝任何​​幫助!

與我是如何得到的答案修訂爲我

使用下面的答案的工作,我安裝Python來它的默認目錄下,並修改了腳本,以便它有完整路徑鑲邊。從那裏我將文件類型關聯設置爲.py文件到python並執行腳本。現在每當我打開Chrome Canary時,它都會運行該Python腳本(至少在我重新啓動我的電腦之前,我將不得不再次運行該腳本)

結果正是我一直在尋找的!

回答

10

在Windows上,stdout輸出被chrome.exe是一個GUI應用程序的事實所抑制。您需要將PE標頭中的子系統字段從IMAGE_SUBSYSTEM_WINDOWS_GUI翻轉到WINDOWS_SUBSYSTEM_WINDOWS_CUI,以查看哪些V8輸出到標準輸出。

您可以用下面的(有點hackish的)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.exe時,您應該看到控制檯窗口出現,您應該能夠通過>重定向stdout。

+0

我不是關於Python很熟悉,但在運行通過'腳本 「C:\ Python27 \ python.exe」 chromeDebug.py'給出了一個IO錯誤:' IOError:[Errno 2]沒有這樣的文件或目錄:'chrome.exe'。解決方案是將「chrome.exe」更改爲完整路徑嗎? – ArkahnX

+0

是的,我沒有指定chrome.exe的完整路徑;我只是在chrome.exe所在的目錄下執行它。 –

+0

(以admin身份運行)我把它放在Chrome旁邊的文件「bastard.py」中,但是我得到了 Traceback(最近調用最後一個): 文件「bastard.py」,第8行,在 with open(「 chrome.exe「,」r + b「)爲f: IOError:[Errno 13] Permission denied:'chrome.exe' – Pawel

4

如果你不喜歡黑客入侵chrome的PE,那麼有Windows的替代方案。

因爲chrome應用程序不在Windows上創建控制檯stdout,所以v8中的所有跟蹤(也是d8編譯器)都會發送到OutputDebugString。 OutputDebugString寫入可供任何其他應用程序讀取的共享內存對象。

Microsoft有一個名爲DebugView的工具,它可以監視並且如果需要還可以流到日誌文件。

的DebugView是免費下載的微軟: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是非常不完整的。它看起來像消息中缺少一些變量替換數據。 –

相關問題