javascript - llnode 不返回 findjsobjects

标签 javascript memory-leaks lldb coredump

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

我在不同版本的 Ubuntu 16.04 和 17.04 以及使用节点 7 和 8 上进行了测试。

我回去尝试了一个简单的 case :

var http = require('http');
var host = "127.0.0.1"
var port = 1338

server = http.createServer(function myRequestListener(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
  res.not_a_function()
}).listen(port, host);

console.log(`Server process ${process.pid} running at http://${host}:${port}/`);

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

kill -s SIGSEGV `ps -ax | grep server.js | cut -d " " -f 1 | head -n 1`

然后我会运行:

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)

我希望在哪里找到 javascript 对象。我怀疑这是一个 PEBKAC 问题,但如果有人有任何指示我可能误入歧途。

最佳答案

这是某种necroposting,但我们在电子构建中遇到了同样的问题 - v8 findjsobjects 没有返回任何输出。

以下所有内容均适用于 MacOS 构建。

因此,问题出在“可见性”链接器标志中,该标志被迫“隐藏”在电子构建中。这就是为什么 llnode 所需的 v8dbg_ 常量即使使用 debug ninja 配置也不会被链接器附加,并且 llonde 找不到任何对象。

为了解决这个问题,我们在 python 生成的 debug-output.cc 文件中使用 pragma 强制默认可见性,并最终能够查看 js 对象。遵循此路径附加

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

在文件 electron-gn/src/v8/tools/gen-postmortem-metadata.py 中的页脚声明之前,并从头开始重建所有电子。另外,构建可能非常巨大,请确保您有 ~100GB 的可用空间。

我认为同样的事情也适用于与 Electron 一起构建的 Node/v8。

希望这有帮助。

关于javascript - llnode 不返回 findjsobjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44832733/

相关文章:

javascript - 有些问题不再生成控制台消息,而是出现在问题选项卡中。点击查看第1页错误

javascript - 动态对象模式,HTML/Javascript

java - 如何在 java 中找到匿名类的 GC 根?

java - MediaControllerCompat 内存泄漏

javascript - javascript错误中的匿名函数

javascript - SignalR 拒绝连接到 [url],因为它违反了以下内容安全策略指令

C# AES 加密内存使用

python - 如何从 lldb python API 访问 C 数组浮点值

ios - LLDB 堆栈跟踪仅显示 XCode 中的最后 2 次调用

python - `tiny_malloc_from_free_list` 使我的指针成为 `NULL` ?