c++ - programming - How to debug binary module of nodejs?
nodejs c++ (3)
I have a node.js module written in C++ that provides some bindings for a C++ library. The library crashes with SIGSEGV, so I need to debug it with GDB and find out what goes wrong.
I already have the source for the module in
./node_modules/somelib/ and if I go to that folder and type
npm install the library is compiled and can be used through a require('somelib') from node.js. I can attach gdb to node and reproduce the error, but in the stacktrace I just see
I'm not sure if this is important but the library is compiled using
- Question 1: How do I load the source code or point gdb to the source code?
- Question 2: How do I configure
node-gypto produce debug symbols?
Shamelessly copied from an archive of the (now broken) link provided by @Peter Cordes
First, compile your add-on using node-gyp with the --debug flag.
$ node-gyp --debug configure rebuild
Second, if you're still in "playground" mode like I am, you're probably loading your module with something like
var ObjModule = require('./ObjModule/build/Release/objModule');
However, when you rebuild using node-gyp in debug mode, node-gyp throws away the Release version and creates a Debug version instead. So update the module path:
var ObjModule = require('./ObjModule/build/Debug/objModule');
$ 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
OK, now we just have to run the application:
(gdb) run ../modTest.js ... Breakpoint 1, StringReverse (args=...) at ../objModule.cpp:49
I just found the answer to this in the
node-gyp documentation. The solution is to invoke the build process with the
--debug flag. That means to invoke
node-gyp configure --debug and/or
node-gyp build --debug. Then instead of a
Release folder a
Debug folder will be created. gdb will then automatically load the source files.
You can add the directory containing the source of the module to gdb's search path:
(gdb) directory /path/to/source
Also, to get
node-gyp debug symbols, install
node-gyp-dbg/dev or equivalent, or compile it with