而實際上,我並不完全理解爲什麼我的代碼不在堆棧跟蹤中,如果節點是單線程的。也許我從根本上誤解了某些東西,但爲什麼我的應用程序有時會死亡,並且沒有任何我寫過的堆棧跟蹤?當我的代碼無處堆棧跟蹤時,如何調試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') {...}
?
http://stackoverflow.com/search?q=express+socket+hang+up –
你可以試試使用類似[longjohn](https://www.npmjs.com/package/longjohn)的方法,它會嘗試在異步邊界('setTimeout','process.nextTick'等等)上維護堆棧跟蹤。雖然你應該避免在生產中使用它,因爲它會影響性能。 – idbehold
請分享代碼? – 1Mayur