gpt4 book ai didi

javascript - Node.js 堆栈跟踪不包含用户代码

转载 作者:行者123 更新时间:2023-11-30 11:31:39 25 4
gpt4 key购买 nike

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

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

Full stacktrace

最佳答案

您似乎正在查看异步堆栈跟踪,其中除了回调之外,您的代码不在堆栈中,因为您的代码已展开/完成,然后调用了异步回调。

全部.then()所有 Promise 的处理程序都使用干净的堆栈异步调用。这是根据 promise 规范。因此,promise 总是让当前执行线程完成并展开,然后它们触发 .then()调用回调时,堆栈上没有用户代码的处理程序。您所描述的是同步代码而不是异步代码的工作方式。如果您展示实际代码并描述您在哪里查看调用堆栈,我们可以更具体地讨论而不是理论上。

异步进度通常必须通过日志记录进行跟踪,因为您无法轻松单步执行它,也不能只是中断并查看堆栈跟踪。

作为一个更简单的例子:

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

foo();

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

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

关于javascript - Node.js 堆栈跟踪不包含用户代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46019723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com