我有一个用C++编写的node.js模块,提供了一些与C++库相关的绑定。该库会导致SIGSEGV崩溃,因此我需要使用GDB进行调试,找出问题所在。
我已经拥有了模块的源代码,在./node_modules/somelib/
文件夹中,如果我进入该文件夹并输入npm install
,则该库将被编译,并可以通过require('somelib')从node.js中使用。我可以附加gdb到node,并重现错误,但在堆栈跟踪中,我只看到 node_modules/somelib/Release/somelib.node
。
我不确定这是否重要,但是该库是使用node-gyp
编译的。
- 问题1:如何加载源代码或将gdb指向源代码?
- 问题2:如何配置
node-gyp
以生成调试符号?
答案1: 在gdb中使用命令"dir"指定源代码路径或者使用"gdb -ex 'set args ' -ex 'directory /path/to/source'"来指定源代码路径。
答案2:在binding.gyp文件中添加" 'cflags!': ['-fno-omit-frame-pointer'], 'ldflags': ['-g'] ",然后重新运行"node-gyp rebuild --debug"来生成带有调试符号的二进制文件。
require
调用从.../Release/...
修改为require('./ObjModule/build/Debug/objModule')
,以及在此处提到的步骤:node-gyp configure --debug
然后是node-gyp build --debug -j 8
。 - Peter Cordes