1

我有一组 Node.js c++ 插件。它们自己完美地工作,我可以调用它们的功能,所以一切都正确链接。当我添加对我需要的外部库的调用(访问数据库)时,一切正常:

  • Node 查看并编译外部类
  • 如果数据库配置数据错误,我会收到连接错误。

但是,如果连接数据是正确的,那么它将执行核心转储而不做任何解释。我已尽我所能从核心转储中获取任何数据,但我一无所有。

如果我采用我正在使用的相同代码并编译它并以 c++ 的形式运行,它就可以工作。所以我知道:

  • 连接数据正确
  • 图书馆工作并连接到数据库(我得到了行)

所以我的结论是:在 Node.js 环境中运行会导致代码中断。

如果有人有更多的 Node.js 经验并且对做什么或可能发生的事情有建议,我将不胜感激。

4

1 回答 1

0

这是一个疯狂的猜测,因为没有提供任何代码,但是否有可能在另一个线程(不同于主线程)中执行 v8 代码?

例如,在成功连接时调用的一些回调会调用 node/v8 函数(我假设你提到的那些外部库会启动它们自己的线程来完成它们的工作)。

如果是这种情况,问题是只能从主线程调用 node/v8 代码。这些 SO 线程可能有用:

至于调试,除了检查内核之外,您还可以使用 gdb 运行您的代码,这样您就可以在一些有趣的地方设置断点。

$ gdb node
(gdb) run test_connection.js 

或者

(gdb) start test_connection.js 
(gdb) break <some interesting place>  
(gdb) cont

GDB 运行和启动信息

即使您没有设置断点,当它崩溃时,您也可以检查堆栈跟踪并查看不同线程中发生的情况。

当然,正如其他人所建议的那样,一切都应该使用调试符号构建。

于 2013-09-03T16:09:05.590 回答