从@Peter Cordes 提供的(现已损坏)链接的存档中无耻地复制
首先,使用带有 --debug 标志的 node-gyp 编译你的插件。
$ node-gyp --debug configure rebuild
其次,如果您仍然像我一样处于“游乐场”模式,那么您可能正在加载您的模块,例如
var ObjModule = require('./ObjModule/build/Release/objModule');
但是,当您在调试模式下使用 node-gyp 进行重建时,node-gyp 会丢弃 Release 版本并创建一个 Debug 版本。所以更新模块路径:
var ObjModule = require('./ObjModule/build/Debug/objModule');
好的,现在我们已经准备好调试我们的 C++ 插件了。对节点二进制文件运行 gdb,这是一个 C++ 应用程序。现在,节点本身并不知道您的插件,因此当您尝试在插件函数(在本例中为 StringReverse)上设置断点时,它会抱怨未定义特定函数。不要害怕,你的插件是它所指的“未来共享库加载”的一部分,一旦你在 JavaScript 中 require() 你的插件就会被加载。
$ 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
好的,现在我们只需要运行应用程序:
(gdb) run ../modTest.js
...
Breakpoint 1, StringReverse (args=...) at ../objModule.cpp:49