首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何调试nodejs的二进制模块?

如何调试nodejs的二进制模块?
EN

Stack Overflow用户
提问于 2014-04-23 03:51:06
回答 4查看 13.5K关注 0票数 21

我有一个用C++编写的node.js模块,它为C++库提供了一些绑定。由于SIGSEGV,这个库崩溃了,所以我需要用GDB对它进行调试,找出哪里出了问题。

我在./node_modules/somelib/中已经有了模块的源代码,如果我转到那个文件夹并输入npm install,这个库就被编译了,并且可以通过node.js中的一个require('somelib')来使用。我可以将gdb附加到节点并重现错误,但在堆栈跟踪中我只能看到node_modules/somelib/Release/somelib.node

我不确定这是否重要,但是这个库是使用node-gyp编译的。

  • Question 1:如何将源代码或点gdb加载到源code?
  • Question 2:如何配置node-gyp以生成调试符号?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-23 05:04:57

我刚刚在node-gyp文档中找到了这个问题的答案。解决方案是使用--debug标志调用构建过程。这意味着调用node-gyp configure --debug和/或node-gyp build --debug。然后,将创建Debug文件夹,而不是Release文件夹。然后gdb会自动加载源文件。

票数 18
EN

Stack Overflow用户

发布于 2018-10-11 23:00:37

厚颜无耻地从 复制了@Peter Cordes提供的链接(现已损坏)

首先,使用node-gyp和--debug标志编译您的附加组件。

代码语言:javascript
复制
$ node-gyp --debug configure rebuild

其次,如果您仍然像我一样处于“游乐场”模式,那么您可能正在使用如下内容加载您的模块

代码语言:javascript
复制
var ObjModule = require('./ObjModule/build/Release/objModule');

但是,当您在调试模式下使用node-gyp进行重新构建时,node-gyp会丢弃发布版本,而创建一个调试版本。所以更新模块路径:

代码语言:javascript
复制
var ObjModule = require('./ObjModule/build/Debug/objModule');

好了,现在我们准备好调试我们的C++插件了。对节点二进制文件运行gdb,这是一个C++应用程序。现在,节点本身并不知道您的附加组件,所以当您尝试在附加组件函数(在本例中为StringReverse)上设置断点时,它会报告没有定义特定的函数。不用担心,您的附加组件是它所指的“未来共享库加载”的一部分,一旦您在JavaScript中请求()您的附加组件,它就会被加载。

代码语言:javascript
复制
$ gdb node
...
Reading symbols from node...done.
(gdb) break StringReverse
Function "StringReverse" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y  

好了,现在我们只需要运行应用程序:

代码语言:javascript
复制
(gdb) run ../modTest.js 
...
Breakpoint 1, StringReverse (args=...) at ../objModule.cpp:49
票数 5
EN

Stack Overflow用户

发布于 2014-04-23 03:54:25

您可以将包含模块源代码的目录添加到gdb的搜索路径中:

代码语言:javascript
复制
(gdb) directory /path/to/source

请参阅:http://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html

此外,要获取node-gyp调试符号,请安装node-gyp-dbg/dev或等效程序,或使用-g编译它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23228868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档