我唯一的目的是使用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=on
和deps/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;
应该会有所帮助。