我唯一的目的是使用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
的{{1}}二进制文件,而不是{ {1}}。我可以看到它有符号定义(out/Debug/node
比Release版本大得多),因为它在使用vTune进行概要分析时不会发出警告。虽然我可以看到所有节点源代码,但我看不到out/Release/node
。
我甚至尝试在strings node | wc -l
下强制变量Dynamic code
和gdbjit=on
我尝试了夜间构建0.11.11和最新的0.11.14。
我不知道该怎么做。
编辑:我正在用不同的选项进行更多的编辑(上面提到的)。最后,我可以看到它如何工作到0.11.12版本,但没有0.11.13或0.11.14。答案 0 :(得分:1)
由于V8的变化,node.js 0.11.13所针对的V8中的VTune支持被破坏。它在最新的V8版本中得到了解决。 对于node.js 0.11.13,您需要手动修复它:
[nodejs-v0.11.13] \ deps \ v8 \ include \ v8.h文件: 取代
Handle<Script> script;
与
Handle<UnboundScript> script;
[nodejs-v0.11.13] \ deps \ v8 \ src \ log.cc file:in&#34; void JitLogger :: LogRecordedBuffer(...)&#34;功能,替换
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 file:in&#34; void VTUNEJITInterface :: event_handler(const v8 :: JitCodeEvent * event)&#34 ;功能,替换
Handle<Script> script = event->script;
与
Handle<UnboundScript> script = event->script;
应该有所帮助。