sab*_*gen 2 javascript debugging v8 node.js
在调试 Node.js 代码时,我经常遇到调用堆栈,其中不包含我的程序代码,仅包含 node_modules/非用户代码,尽管当前执行行位于我的代码中的某个位置。这违背了跟踪调用堆栈以查看应用程序代码的执行路径的目的。
为什么我的源文件没有显示在调用堆栈中?
您似乎正在查看异步堆栈跟踪,其中除了回调之外,您的代码不在堆栈中,因为您的代码展开/完成,然后调用了异步回调。
所有.then()Promise 的所有处理程序都使用干净的堆栈异步调用。这是根据承诺规范。因此,Promise 总是让当前执行线程完成并展开,然后.then()在调用回调时触发堆栈上没有用户代码的处理程序。您所描述的是同步代码而不是异步代码的工作方式。如果您展示实际代码并描述您在哪里查看调用堆栈,我们可以更具体地讨论而不是理论上。
异步进度通常必须通过日志记录进行跟踪,因为您无法轻松地单步执行它,也不能只是中断并查看堆栈跟踪。
作为一个更简单的例子来看看:
function foo() {
setTimeout(() => {
console.log("timer"); // set breakpoint here
}, 100);
}
foo();
Run Code Online (Sandbox Code Playgroud)
该函数foo()已完成执行并在调用回调之前返回,因此堆栈跟踪上不会有任何代码(除了回调之外)。
虽然.then()处理程序使用的调度程序与 稍有不同setTimeout(),但原理是相同的。
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |