首頁 > web前端 > js教程 > 在 JavaScript 中調試「無聲錯誤」的命令

在 JavaScript 中調試「無聲錯誤」的命令

Susan Sarandon
發布: 2024-12-21 04:21:10
原創
795 人瀏覽過

ommands to Debug “Silent Errors” in JavaScript

這裡的無提示錯誤是指任何問題都不會產生任何可見的指示。

一些最常見的例子:

  1. 缺少 Catch 區塊
  2. 長期承諾
  3. 共享狀態競爭條件
  4. 錯誤的事件監聽器

讓我們一一詳細了解以及如何調試它們:


#1:偵錯遺失的 Catch 區塊

當您錯過將 .catch() 處理程序附加到您的 Promise 時,就會發生這些錯誤。因此,當承諾被拒絕時,錯誤就不會出現。

您可以透過使用 unhandled-rejections 參數執行程式碼來偵錯此錯誤。它強制節點在未處理的承諾拒絕時終止進程,從而使錯誤明確。

node --unhandled-rejections=strict script.js
登入後複製

#2:調試長期運行的 Promise

您是否曾經遇到以下 Node.js 程式碼:

  • 永遠不會完成
  • 隨著時間的推移消耗過多的記憶體

如果是,那麼很可能是由未解決的 Promise 或某個地方的無限循環引起的。

您可以透過限制腳本的執行時間來驗證問題,如下所示:

timeout 10s node script.js || echo "Warning: Unresolved promise or infinite loop detected"
登入後複製

#3:調試共享狀態競爭條件

當多個回呼同時存取共享狀態時,會發生共享狀態競爭條件。

由於競爭條件,程式會導致不可預測的結果,導致測試期間數據不一致且沒有明顯症狀。

但幸運的是,node 實際上提供了一個 trace-async-hooks 選項來識別此類執行模式。

node --trace-async-hooks script.js 2>&1 | grep "asyncId"
登入後複製

#4:偵錯錯誤的事件監聽器

最後我們來談談事件監聽器中的錯誤。

這些是由事件偵聽器回呼中未處理的承諾拒絕引起的。這會導致錯誤永遠不會傳播到主執行上下文。

您可以透過將所有節點事件日誌重新導向到 grep 過濾器以捕獲事件處理期間發出的錯誤來識別這些錯誤

node -r events script.js 2>&1 | grep "Error"
登入後複製

就是這樣。

希望您在偵錯 JavaScript 程式碼中的靜默錯誤時會發現這些指令很有用。

另外,請在下面評論哪個無聲錯誤最讓你煩惱?

以上是在 JavaScript 中調試「無聲錯誤」的命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板