Javascript llnode不返回findjsobject

Javascript llnode不返回findjsobject,javascript,memory-leaks,lldb,coredump,Javascript,Memory Leaks,Lldb,Coredump,我正在调试节点应用程序中的内存泄漏。但是,我无法使用llnode显示任何javascript对象。我跟踪了布伦丹 我在Ubuntu 16.04和17.04的不同版本上进行了测试,还使用了Node7和Node8 我回去试了一个简单的方法: 然后我会发送一个seg故障信号(上面的代码被放入server.js中): 然后我会跑: lldb-4.0 -c /cores/core.dump -f /usr/bin/node 在llnode内部,当我查询javascript对象时,我返回了一个空列表 (l

我正在调试节点应用程序中的内存泄漏。但是,我无法使用llnode显示任何javascript对象。我跟踪了布伦丹

我在Ubuntu 16.04和17.04的不同版本上进行了测试,还使用了Node7和Node8

我回去试了一个简单的方法:

然后我会发送一个seg故障信号(上面的代码被放入server.js中):

然后我会跑:

lldb-4.0 -c /cores/core.dump -f /usr/bin/node
在llnode内部,当我查询javascript对象时,我返回了一个空列表

(lldb) v8 bt
* thread #1: tid = 28763, 0x00007f8947ff7929, name = 'node', stop reason = signal SIGSEGV
  * frame #0: 0x00007f8947ff7929
    frame #1: 0x00005585e8df035b node`v8_inspector::V8FunctionCall::callWithoutExceptionHandling() + 11
    frame #2: 0x00005585e8ddf26c node`v8_inspector::V8Debugger::captureStackTrace(bool) + 92
    frame #3: 0x00005585e8bc1493 node`node::inspector::InspectorSocketServer::SocketConnectedCallback(uv_stream_s*, int) + 163
    frame #4: 0x00005585e8bbb821 node`node::inspector::InspectorConsoleCall(v8::FunctionCallbackInfo<v8::Value> const&) + 817
    frame #5: 0x00007f8947f153f1
(lldb) v8 findjsobjects
 Instances  Total Size Name
 ---------- ---------- ----
(lldb)
(lldb)v8 bt
*线程#1:tid=28763,0x00007f8947ff7929,名称='node',停止原因=信号SIGSEGV
*帧#0:0x00007f8947ff7929
帧#1:0x00005585e8df035b节点`v8_检查器::V8FunctionCall::callWithoutExceptionHandling()+11
帧#2:0x00005585e8ddf26c节点`v8_检查器::V8Debugger::captureStackTrace(bool)+92
帧#3:0x00005585e8bc1493节点`节点::检查器::检查器SocketServer::SocketConnectedCallback(uv_流_s*,int)+163
帧#4:0x00005585E8BB821 node`node::inspector::inspector::inspector或consoleCall(v8::FunctionCallbackInfo const&)+817
帧#5:0x00007f8947f153f1
(lldb)v8 findjsobjects
实例总大小名称
---------- ---------- ----
(lldb)

我希望在这里找到javascript对象。我怀疑这是一个PEBAC问题,但如果有人指出我可能误入歧途的地方。

这是一种死尸发布,但我们在electron build上也有同样的问题-
v8 findjsobjects
不返回任何输出

下面是MacOS构建的所有内容

因此,问题在于“可见性”链接器标志,它在electron构建中被强制“隐藏”。这就是为什么llnode需要
v8dbg_uuu
常量,即使使用
debug
ninja config,链接器也不会附加这些常量,而llonde也找不到任何对象

为了克服这个问题,我们在python生成的debug-output.cc文件中使用pragma强制默认可见性,并最终能够查看js对象。要遵循此路径,请执行以下操作:

#pragma GCC可见性推送(默认)

在文件
electron-gn/src/v8/tools/gen postmortem-metadata.py
中的页脚声明之前,重新构建所有electron。此外,构建可能非常庞大,请确保您有~100GB的可用空间

我认为同样的事情也适用于node/v8构建和electron


希望这能有所帮助。

您是什么时候安装llnode的,从哪里安装的?Node 8支持相对较新,因此如果您有一个旧版本,您可能会遇到问题。您可以通过执行以下操作快速安装要测试的最新版本:npm install--lldb_exe=lldb-4.0 nodejs/llnode从github安装并让npm构建插件库。我大约在1-2周前从github安装了llnode。我也尝试过不同版本的lldb,使用3.8和LLNODERANGEFILE,但都不管用<代码>lldb-4.0-c/cores/core.28763.1498757571-f/usr/bin/node(lldb)目标创建“/usr/bin/node”--core“/core/core.28763.1498757571”核心文件“/cores/core.28763.149875757571”(x86_64)已加载。(lldb)v8 findjsobjects实例总大小名称------------------------(lldb)作为一项完整性检查/usr/bin/node是运行您的程序的同一个节点可执行文件吗?这是正确的。在出现此问题之前,我首先尝试从其他地方复制节点二进制文件。然后我决定在没有额外变量的情况下进行复制,所有内容都是本地的,机器上的节点版本相同。对于注释来说,这可能太长了,如果您提出问题,我们可以在那里进行讨论,并(希望)在解决问题后将修复返回这里。
lldb-4.0 -c /cores/core.dump -f /usr/bin/node
(lldb) v8 bt
* thread #1: tid = 28763, 0x00007f8947ff7929, name = 'node', stop reason = signal SIGSEGV
  * frame #0: 0x00007f8947ff7929
    frame #1: 0x00005585e8df035b node`v8_inspector::V8FunctionCall::callWithoutExceptionHandling() + 11
    frame #2: 0x00005585e8ddf26c node`v8_inspector::V8Debugger::captureStackTrace(bool) + 92
    frame #3: 0x00005585e8bc1493 node`node::inspector::InspectorSocketServer::SocketConnectedCallback(uv_stream_s*, int) + 163
    frame #4: 0x00005585e8bbb821 node`node::inspector::InspectorConsoleCall(v8::FunctionCallbackInfo<v8::Value> const&) + 817
    frame #5: 0x00007f8947f153f1
(lldb) v8 findjsobjects
 Instances  Total Size Name
 ---------- ---------- ----
(lldb)