0

我唯一的目的是使用 vTune 对 Node.js 下的 JavaScript 代码进行分析。

我尝试按照这篇文章中出现的步骤进行操作:Profiling Nodejs with vTune,但我没有运气。

我使用的是 Debian 7 x86_64,我的 vTune Amplifier XE 版本是 2015(评估模式)。这些模块是在启动时加载的service sep3_15 start,我可以用lsmod. 另外,我构建了jitprofilingvTune 提供的示例项目,它可以工作(我可以看到动态内容)。所以,我的问题是构建带有 vTune 支持的 Node.js。

如果我执行上述步骤,并且只vcbuild.bat nosign使用./configureand进行更改,make则会收到错误“../src/node.cc:22:67: fatal error: v8-vtune.h: No such file or directory”,并且继续正确编译的唯一解决方案是在中添加下一行node.gyp

  'include_dirs': [
    // ...
    'deps/v8/src/third_party/vtune',
    // ...

这是获取包含(v8-vtune.h)和编译节点的唯一方法。

但是当使用 vTune Amplifier 导入时,我看不到Dynamic codeJS 的源代码。

我尝试了许多不同的事情,例如构建节点以使用./configure --build甚至进行调试./configure --debug --gdb,然后强制从 执行node二进制文件out/Debug/node,而不是从out/Release/node. 我可以看到它具有符号定义(strings node | wc -l比发布版本大得多),因为它在使用 vTune 进行分析时不会引发警告。虽然我可以看到所有节点源代码,但我看不到Dynamic code.

我什至试图强制变量gdbjit=onvtunejit=ondeps/v8/Makefile

我尝试使用每晚构建 0.11.11 和最新的 0.11.14。

我不知道该怎么做。

编辑:我正在使用不同的选项进行更多的编译(如上所述)。最后,我可以看到它在 0.11.12 版本之前是如何工作的,但 0.11.13 和 0.11.14 都没有。

4

1 回答 1

1

由于 V8 中的更改,node.js 0.11.13 所针对的 V8 中的 VTune 支持被破坏。它已在最新的 V8 版本中得到解决。对于 node.js 0.11.13,您需要手动修复它:

  1. 按照此说明使用 vTune 分析 Nodejs。我假设你已经做到了。
  2. 修复损坏的 VTune 支持:

[nodejs-v0.11.13]\deps\v8\include\v8.h 文件:替换

Handle<Script> script;

Handle<UnboundScript> script;

[nodejs-v0.11.13]\deps\v8\src\log.cc 文件:在“void JitLogger::LogRecordedBuffer(...)”函数中,替换

event.script = ToApiHandle<v8::UScript>(script_handle);

event.script = ToApiHandle<v8::UnboundScript>(script_handle);

[nodejs-v0.11.13]\deps\v8\src\third_party\vtune\vtune-jit.cc 文件:在“void VTUNEJITInterface::event_handler(const v8::JitCodeEvent* event)”函数中,替换

Handle<Script> script = event->script;

Handle<UnboundScript> script = event->script;

它应该有帮助。

于 2014-10-30T09:01:11.053 回答