9

我在网上浏览了各种资源并进行了许多 Google 搜索,但我似乎找不到任何关于如何在 Google Chrome 中使用 V8 --trace-* 标志的具体说明。我看过一些“您也可以在 Chrome 中执行此操作”,但我无法找到我正在寻找的内容,输出如下:(片段靠近帖子的底部)为 V8 优化

我找到了将数据记录到文件的参考: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 Ultimate x64 上运行 Google Chrome Canary
  • 捷径目标是"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 脚本(至少在我重新启动我的电脑之前,我必须再次运行那个脚本)

结果正是我想要的!

4

2 回答 2

12

在 Windows 上,标准输出被 chrome.exe 是一个 GUI 应用程序这一事实所抑制。您需要将 PE 标头中的 Subsystem 字段从 to 翻转IMAGE_SUBSYSTEM_WINDOWS_GUIWINDOWS_SUBSYSTEM_WINDOWS_CUI以查看 V8 输出到 stdout 的内容。

您可以使用以下(有点骇人听闻的)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 时,您应该会看到控制台窗口出现,并且您应该能够通过>.

于 2012-06-20T19:43:00.030 回答
5

如果您不热衷于破解 chrome 的 PE 条目,那么可以选择 windows。

因为 chrome 应用程序不会在 Windows 上创建控制台标准输出,所以 v8(也是 d8 编译器)中的所有跟踪都被发送到 OutputDebugString。OutputDebugString 写入任何其他应用程序都可以读取的共享内存对象。

Microsoft 有一个名为 DebugView 的工具,它可以监控并在需要时流式传输到日志文件。

DebugView 是免费的,可从微软下载:http ://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

于 2013-11-17T17:59:51.660 回答