Javascript Node.js';不包括用户代码

Javascript Node.js';不包括用户代码,javascript,node.js,debugging,v8,Javascript,Node.js,Debugging,V8,调试Node.js代码时,我经常遇到调用堆栈,这些调用堆栈中不包含程序代码,仅包含Node_模块/非用户代码,尽管当前执行行位于代码中的某个位置。这违背了遵循调用堆栈查看应用程序代码执行路径的目的 为什么我的源文件没有显示在调用堆栈中 看来您正在查看一个异步堆栈跟踪,其中代码不在堆栈中,回调除外,因为代码解缠/完成,然后调用了异步回调 使用干净的堆栈异步调用所有承诺的所有.then()处理程序。这是根据承诺规范。因此,承诺总是让当前的执行线程完成并展开,然后在调用回调时启动堆栈上没有用户代码的.

调试Node.js代码时,我经常遇到调用堆栈,这些调用堆栈中不包含程序代码,仅包含Node_模块/非用户代码,尽管当前执行行位于代码中的某个位置。这违背了遵循调用堆栈查看应用程序代码执行路径的目的

为什么我的源文件没有显示在调用堆栈中


看来您正在查看一个异步堆栈跟踪,其中代码不在堆栈中,回调除外,因为代码解缠/完成,然后调用了异步回调

使用干净的堆栈异步调用所有承诺的所有
.then()
处理程序。这是根据承诺规范。因此,承诺总是让当前的执行线程完成并展开,然后在调用回调时启动堆栈上没有用户代码的
.then()
处理程序。您所描述的是同步代码如何工作,而不是异步代码。如果您展示了实际代码并描述了调用堆栈的位置,我们可以更具体地讨论,而不是理论上的


异步进程通常必须通过日志记录来跟踪,因为您无法轻松地一步一步地完成它,也不能只中断并查看堆栈跟踪

作为一个简单的例子:

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

foo();
函数
foo()
在调用回调之前已完成执行并返回,因此堆栈跟踪上不会有任何代码(回调除外)


.then()
处理程序使用的调度程序与
setTimeout()稍有不同,原理是一样的。

我可能会猜测您正在查看一个异步堆栈跟踪,其中您的代码不在堆栈中,除了回调,因为您的代码解缠/完成,然后调用了异步回调。是否有办法确认这一点?事实上,这就是问题所在?我正在使用承诺并将每个承诺返回给它的父承诺,因此我希望从原始源代码到断点都有一个完整的调用跟踪。所有
。然后()所有承诺的
处理程序都会以干净的堆栈异步调用。这是根据承诺规范。因此,承诺总是让当前的执行线程完成并展开,然后在调用回调时启动堆栈上没有用户代码的
.then()
处理程序。您所描述的是同步代码如何工作,而不是异步代码。如果您展示了实际代码并描述了调用堆栈的位置,我们可以更具体地讨论,而不是从理论上讨论。异步进度通常必须通过日志记录进行跟踪,因为您无法轻松地逐步完成它,也不能只断开并查看堆栈跟踪。感谢您的解释。我相信我们已经找到了这个问题的根源,你是否愿意提出一个我可以接受的答案?