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

我尝试按照此帖子下显示的步骤操作:Profiling Nodejs with vTune,但是我没有运气。

我使用Debian 7 x86_64,我的vTune Amplifier XE版本是2015(评估模式)。这些模块在引导时就装有service sep3_15 start,我可以在lsmod中看到它们。另外,我构建了vTune随附的示例jitprofiling项目,并且该项目有效(我可以看到动态内容)。因此,我的问题是使用vTune支持构建Node.js。

如果执行上述步骤,并且仅用vcbuild.bat nosign./configure更改make,则会收到错误消息“ ../src/node.cc:22:67:致命错误:v8-vtune.h:没有这样的文件或目录”,并且继续正确编译的唯一解决方案是在node.gyp中还添加下一行:

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


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

但是用vTune Amplifier导入时,我看不到Dynamic code或JS的来源。

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

我什至尝试在gdbjit=on下强制变量vtunejit=ondeps/v8/Makefile

我尝试使用夜间版本0.11.11和最新版本0.11.14。

我不知道该怎么办。

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

最佳答案

由于V8中的更改,以node.js 0.11.13为目标的V8中的VTune支持被破坏。在最新的V8版本中已解决该问题。
对于node.js 0.11.13,您需要手动对其进行修复:


请遵循以下指示Profiling Nodejs with vTune。我认为您已经完成了。
修复损坏的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;


应该会有所帮助。

09-26 16:38