我的代码只在c++中工作,但在Node.js中无法使用相同的代码

My code is working in c++ exclusively but the same code will not work from within Node.js

本文关键字:代码 js 但在 c++ 工作 我的 Node      更新时间:2023-10-16

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

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

然而,如果连接数据是正确的,那么它将进行核心转储,而不做任何解释。我已经尽了最大努力从核心转储中获取任何数据,但我什么都没有。

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

  • 连接数据正确
  • 库工作并连接到数据库(我会返回行)

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

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

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

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

如果是这样的话,问题是node/v8代码只能从主线程调用。那些SO线程可能很有用:

  • 从node.js本机代码调用回调
  • NodeJS Native扩展中来自不同线程的回调

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

$ gdb node
(gdb) run test_connection.js 

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

GDB运行和启动信息

即使你不设置断点,当它崩溃时,你也可以检查堆栈跟踪,看看不同线程中发生了什么。

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