【问题标题】:How to trace uncaughtException exception in Node.js?如何在 Node.js 中跟踪 uncaughtException 异常?
【发布时间】:2016-03-29 06:55:34
【问题描述】:

如何找出该错误的来源?错误输出看起来不是很有描述性。从日志看,是ECONNRESET错误。

process.on('uncaughtException', function(err) {

})

【问题讨论】:

  • 最好的开始是停止使用uncaughtException 处理程序并正确处理回调和承诺中的所有错误。
  • @RobertRossmann 还有其他的调试方法吗?它通常在应用程序休息一段时间后发生。
  • 也许这里有一个有用的链接,configure Node to dump core on an uncaught exception
  • @TuanAnhTran 处理错误调试。相信我,如果你今天不处理错误,你应该立即开始这样做。否则你的应用永远不会稳定,它总是会因为最意想不到的原因而崩溃,你将不知道这是从哪里来的。
  • @RobertRossmann 谢谢。

标签: node.js uncaught-exception


【解决方案1】:

我遇到了同样的问题。

让事情变得困难的是,它不在我的代码中,而是在我使用的库中。

所以您也发现,提供的堆栈跟踪根本没有帮助。即使在安装了像 longjohn 这样的包之后,您从该服务器崩溃中获得的堆栈跟踪都是内部的:

Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
---------------------------------------------
    at _destroy (internal/streams/destroy.js:34:15)
    at Socket._destroy (net.js:607:3)
    at Socket.destroy (internal/streams/destroy.js:32:8)
    at TCP.onStreamRead (internal/stream_base_commons.js:111:19)
Waiting for the debugger to disconnect...

您需要处理emitter.on("error") 事件,基本上如下所述:Node js ECONNRESET

在我的情况下,我能够通过curl 请求发送无效密码来重现错误。并且能够解决,因为我使用的库为传入请求公开了 request 对象。

因此,这是我的解决方案代码:

function onRequest(requestDetails){
            requestDetails.request.connection.on( "error", ( _err ) => {
                log.error( "request.connection.on.error", _err );
            } );

            let reqSocket = requestDetails.request.socket;
            reqSocket.on( "error", ( _err ) => {
                log.error( "request.socket.on.error", _err );
                reqSocket.destroy( _err );
            } );

            requestDetails.request.on( "error", ( _err ) => {
                log.error( "request.on.error", _err );
            } );

            // my actual request handling code goes here.....
}

我还为 server 对象添加了错误处理程序,尽管在这种情况下不需要这样做:

    server.on( 'requestFailed', ( { request, error }: any ) => {
        log.error( `Request ${ request.url } failed`, error );
    } );

    server.on( 'error', ( ...args: any[] ) => {
        log.error( "server.on.error", args );
    } );

    server.on( 'connection', function ( socket ) {
        socket.on( 'error', function ( err ) {
            log.error( "Client socket error:", err );
            socket.destroy( err );
        } );
    } );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多