当我的代码不在堆栈跟踪中时,如何调试 node.js 错误?

2024-01-04

事实上,我并不完全理解why如果节点是单线程的,我的代码不在堆栈跟踪中。也许我从根本上误解了一些东西,但是为什么我的应用程序有时会因堆栈跟踪而终止,而堆栈跟踪中没有我编写的任何内容?

我正在使用 node/express 编写一个非常简单的代理服务器。例如,我定期收到此“套接字挂起错误”:

Error: socket hang up
 at createHangUpError (_http_client.js:250:15)
 at Socket.socketOnEnd (_http_client.js:342:23)
 at emitNone (events.js:91:20)
 at Socket.emit (events.js:185:7)
 at endReadableNT (_stream_readable.js:926:12)
 at _combinedTickCallback (internal/process/next_tick.js:74:11)
 at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }

由于堆栈跟踪中的 JavaScript 文件都不是我的,所以我不知道它来自哪里。这基本上是反复试验,尝试捕获错误并添加 .on 样式错误处理程序,直到找到正确的位置。

我觉得我从根本上错过了一些东西 - 我应该做些什么不同的事情才能调试这样的错误?如果我看不到(在我的代码中)导致它的原因,我如何知道在哪里处理它?我怎么知道我是否应该使用 try/catch 块,或者类似的东西request.on('error') {...}?


有些错误(例如您提到的错误)不是由您的代码引起的。事实上这是由缺少代码在您的应用程序中。 (例如,您的应用程序代码可能缺少用于优雅地处理 ECONNRESET 的代码,即远程套接字断开连接。

现在,关于如何调试此类错误(包括第三方代码)的问题。当然,您可以使用堆栈跟踪和longjohn https://github.com/mattinsler/longjohn etc.

但是,对于我来说,easier & quicker解决方案是在调试模式下运行应用程序- 检查 https://nodejs.org/api/debugger.html#debugger_v8_inspector_integration_for_node_js选项,与Chrome 调试器检查它(没有断点), with 出现异常时暂停选项已启用。这就是您需要做的全部。现在,每当出现异常时,chrome 调试器都会在引发异常的行处暂停应用程序。使得发现此类错误变得更加容易。

希望这对您有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我的代码不在堆栈跟踪中时,如何调试 node.js 错误? 的相关文章

随机推荐