在Google Chrome中使用--js-flags获取--trace输出

Ark*_*hnX 9 google-chrome v8

我在线查看了各种来源并完成了大量的Google搜索,但我似乎无法找到有关如何使用Google Chrome中的V8 --trace-*标记的任何具体说明.我见过一些"你可以在Chrome中做到这一点",但是我找不到我想要的东西,输出是这样的:(片段靠近帖子的底部)对V8进行优化.

我发现数据被记录到文件中的参考:用V8分析Chromium并且我发现该文件很可能被命名为v8.log :(丢失了该链接)但是我没有找到关于如何生成该文件的任何线索文件或其所在位置.它似乎不在chrome目录或用户目录中.

显然我需要为chrome.dll启用.map文件,但是我无法找到任何可以帮助我的东西.

我之所以喜欢使用Chrome的V8而不是构建V8并使用shell,是因为我想测试的JavaScript使用了DOM,我认为它不会包含在V8 shell中.但是如果它是,那将是很好的知道,那么我可以重写代码来工作sans-html文件和测试.但我的猜测是V8本身就是sans-DOM访问,就像node.js一样

总而言之;

  • 在Windows 7旗舰版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脚本(至少在我重启我的电脑之前,我必须再次运行该脚本)

结果正是我想要的!

Vya*_*rov 12

在Windows上,由于chrome.exe是一个GUI应用程序,stdout输出被抑制.您需要翻转的PE头子系统领域从IMAGE_SUBSYSTEM_WINDOWS_GUIWINDOWS_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)
Run Code Online (Sandbox Code Playgroud)

关闭所有Chrome实例并执行此脚本.当您重新启动chrome.exe时,您应该看到控制台窗口出现,您应该能够重定向stdout通过>.

  • @myself再次,需要添加--no-sandbox标志.Chrome说它不支持,但实际上它是必需的 (2认同)

Pet*_*ery 5

如果你不热衷于攻击铬的PE条目,那么就有替代窗户.

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

Microsoft有一个名为DebugView的工具,它监视并在必要时也流式传输到日志文件.

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