Javascript Node.js';不包括用户代码
调试Node.js代码时,我经常遇到调用堆栈,这些调用堆栈中不包含程序代码,仅包含Node_模块/非用户代码,尽管当前执行行位于代码中的某个位置。这违背了遵循调用堆栈查看应用程序代码执行路径的目的 为什么我的源文件没有显示在调用堆栈中Javascript Node.js';不包括用户代码,javascript,node.js,debugging,v8,Javascript,Node.js,Debugging,V8,调试Node.js代码时,我经常遇到调用堆栈,这些调用堆栈中不包含程序代码,仅包含Node_模块/非用户代码,尽管当前执行行位于代码中的某个位置。这违背了遵循调用堆栈查看应用程序代码执行路径的目的 为什么我的源文件没有显示在调用堆栈中 看来您正在查看一个异步堆栈跟踪,其中代码不在堆栈中,回调除外,因为代码解缠/完成,然后调用了异步回调 使用干净的堆栈异步调用所有承诺的所有.then()处理程序。这是根据承诺规范。因此,承诺总是让当前的执行线程完成并展开,然后在调用回调时启动堆栈上没有用户代码的.
看来您正在查看一个异步堆栈跟踪,其中代码不在堆栈中,回调除外,因为代码解缠/完成,然后调用了异步回调 使用干净的堆栈异步调用所有承诺的所有
.then()
处理程序。这是根据承诺规范。因此,承诺总是让当前的执行线程完成并展开,然后在调用回调时启动堆栈上没有用户代码的.then()
处理程序。您所描述的是同步代码如何工作,而不是异步代码。如果您展示了实际代码并描述了调用堆栈的位置,我们可以更具体地讨论,而不是理论上的
异步进程通常必须通过日志记录来跟踪,因为您无法轻松地一步一步地完成它,也不能只中断并查看堆栈跟踪 作为一个简单的例子:
function foo() {
setTimeout(() => {
console.log("timer"); // set breakpoint here
}, 100);
}
foo();
函数foo()
在调用回调之前已完成执行并返回,因此堆栈跟踪上不会有任何代码(回调除外)
而
.then()
处理程序使用的调度程序与setTimeout()稍有不同,原理是一样的。我可能会猜测您正在查看一个异步堆栈跟踪,其中您的代码不在堆栈中,除了回调,因为您的代码解缠/完成,然后调用了异步回调。是否有办法确认这一点?事实上,这就是问题所在?我正在使用承诺并将每个承诺返回给它的父承诺,因此我希望从原始源代码到断点都有一个完整的调用跟踪。所有。然后()所有承诺的处理程序都会以干净的堆栈异步调用。这是根据承诺规范。因此,承诺总是让当前的执行线程完成并展开,然后在调用回调时启动堆栈上没有用户代码的.then()
处理程序。您所描述的是同步代码如何工作,而不是异步代码。如果您展示了实际代码并描述了调用堆栈的位置,我们可以更具体地讨论,而不是从理论上讨论。异步进度通常必须通过日志记录进行跟踪,因为您无法轻松地逐步完成它,也不能只断开并查看堆栈跟踪。感谢您的解释。我相信我们已经找到了这个问题的根源,你是否愿意提出一个我可以接受的答案?