繁体   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