簡體   English   中英

Node.js stacktraces不包含用戶代碼

[英]Node.js stacktraces don't include user code

在調試Node.js代碼時,我經常會遇到不包含程序代碼的調用堆棧,只有node_modules /非用戶代碼,盡管當前的執行行是在我的代碼中的某個位置。 這違背了跟隨調用堆棧通過我的應用程序代碼查看執行路徑的目的。

為什么我的源文件沒有顯示在調用堆棧中?

完整的堆棧跟蹤

您似乎正在查看異步堆棧跟蹤,其中您的代碼不在堆棧中,除了回調,因為您的代碼已解除/完成,然后調用了異步回調。

所有promises的所有.then()處理程序都與一個干凈的堆棧異步調用。 這是承諾規范。 所以,promises總是讓當前的執行線程完成並解除,然后在調用回調時它們會.then()處理程序,而堆棧上沒有用戶代碼。 您所描述的是同步代碼如何工作,而不是異步代碼。 如果您展示實際代碼並描述您正在查看調用堆棧的位置,我們可以更具體地討論,而不是理論上。

通常必須使用日志記錄跟蹤異步進度,因為您無法輕松地逐步執行它,您也不能只是打破並查看堆棧跟蹤。

作為一個更簡單的例子來看:

function foo() {
   setTimeout(() => {
       console.log("timer");    // set breakpoint here
   }, 100);
}

foo();

函數foo()已經完成執行並在調用回調之前返回,因此堆棧跟蹤將不會包含任何代碼(除了回調之外)。

雖然.then()處理程序使用的調度程序與setTimeout()略有不同,但原理是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM