這裡的無提示錯誤是指任何問題都不會產生任何可見的指示。
一些最常見的例子:
讓我們一一詳細了解以及如何調試它們:
當您錯過將 .catch() 處理程序附加到您的 Promise 時,就會發生這些錯誤。因此,當承諾被拒絕時,錯誤就不會出現。
您可以透過使用 unhandled-rejections 參數執行程式碼來偵錯此錯誤。它強制節點在未處理的承諾拒絕時終止進程,從而使錯誤明確。
node --unhandled-rejections=strict script.js
您是否曾經遇到以下 Node.js 程式碼:
如果是,那麼很可能是由未解決的 Promise 或某個地方的無限循環引起的。
您可以透過限制腳本的執行時間來驗證問題,如下所示:
timeout 10s node script.js || echo "Warning: Unresolved promise or infinite loop detected"
當多個回呼同時存取共享狀態時,會發生共享狀態競爭條件。
由於競爭條件,程式會導致不可預測的結果,導致測試期間數據不一致且沒有明顯症狀。
但幸運的是,node 實際上提供了一個 trace-async-hooks 選項來識別此類執行模式。
node --trace-async-hooks script.js 2>&1 | grep "asyncId"
最後我們來談談事件監聽器中的錯誤。
這些是由事件偵聽器回呼中未處理的承諾拒絕引起的。這會導致錯誤永遠不會傳播到主執行上下文。
您可以透過將所有節點事件日誌重新導向到 grep 過濾器以捕獲事件處理期間發出的錯誤來識別這些錯誤
node -r events script.js 2>&1 | grep "Error"
就是這樣。
希望您在偵錯 JavaScript 程式碼中的靜默錯誤時會發現這些指令很有用。
另外,請在下面評論哪個無聲錯誤最讓你煩惱?
以上是在 JavaScript 中調試「無聲錯誤」的命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!