【问题标题】:get assembly code generated by JavaScript compiler获取 JavaScript 编译器生成的汇编代码
【发布时间】:2017-11-11 20:29:04
【问题描述】:

我正在使用带有 Ignition 和 Turbofan 的 v8 / Node 8.8,并尝试获取由我的 JavaScript 生成的汇编代码,但到目前为止,asm 和代码输出的大小相同,不受实际代码差异的影响。

所以node --trace-hydrogen --trace_phase=Z --trace_deopt --code_comments --hydroge n_track_positions --redirect_code_traces --trace_hydrogen_file=test.js --print_ code test.js似乎只输出编译器本身的代码,而不是处理后的JS代码背后的代码。

Ignition / Turbofan 需要哪些标志?

【问题讨论】:

    标签: javascript node.js assembly v8 trace


    【解决方案1】:

    Ignition 作为解释器,不会产生汇编代码。

    对于 Turbofan,标志是 --print-opt-code

    【讨论】:

    • 是否有启用调试的预构建二进制文件?默认情况下,它不适用于节点二进制文件。
    • 另外,--print-opt-code 应该默认使用 node 二进制文件,参见:github.com/nodejs/node/blob/master/common.gypi#L32
    • 那么有没有可靠的方法在不强制优化的情况下始终获取汇编代码以进行进一步分析?正如我已经写过的,.-print-opt-code 在大多数情况下什么都不输出。所以字节码只有优化后才会显示?
    • 是否可以去掉node/v8引擎的代码但保留分析的js文件的代码? 1.8MB 是相当多的开销。
    • V8 本身在启动时不会打印任何(字节)代码。我不知道你在看什么;我猜这是Node的初始化/启动。无论如何,--print-bytecode --print-bytecode-filter=my_function 只打印function my_function(....) { ... } 的字节码。
    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2017-08-27
    • 2017-08-17
    • 2015-07-03
    • 2011-11-08
    相关资源
    最近更新 更多