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

实际上,我不完全明白为什么我的代码不在堆栈跟踪中,如果节点是单线程的.也许我从根本上误解了一些事情,但为什么我的应用程序有时会因为我没有写过任何内容的堆栈跟踪而死亡?

我正在使用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的代码,即远程套接字断开连接.

现在,关于如何调试这些错误(包括第三方代码)的问题.当然可以使用stack-trace和longjohn

但是,对我来说,更快的解决方案是使用–inspect选项在调试模式下运行应用程序,使用Chrome调试器检查它(无断点),启用“暂停启用”选项.这就是你需要做的所有事情.现在,只要有异常,chrome调试器就会将应用程序完全暂停在抛出异常的行.使它更容易找到这样的错误.

Pause On Exception

希望这可以帮助你!

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...