Node.js堆栈跟踪不包括用户代码

在debuggingNode.js代码时,我经常遇到不包含我的程序代码的调用堆栈,只有node_modules /非用户代码,尽pipe当前的执行行在我的代码中。 这违背了调用堆栈的目的,通过我的应用程序代码来查看执行path。

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

完整的堆栈跟踪

看起来你正在寻找一个asynchronous堆栈跟踪,其中你的代码不在栈中,除了你的callback,因为你的代码展开/完成,然后调用asynchronouscallback。

所有的.then()所有的promise都是用一个干净的堆栈asynchronous调用的。 这是根据承诺规范。 所以,promises总是让当前的执行线程完成并展开,然后在调用callback时,它们会触发.then()处理程序,在堆栈上没有用户代码。 你所描述的是同步代码是如何工作的,而不是asynchronous代码。 如果你展示了实际的代码,并且描述了你正在查看调用堆栈的位置,我们可以更具体地说,而不是理论上。

asynchronous进度经常需要跟踪日志logging,因为你不能轻易地通过它,你也不能只是打破和查看堆栈跟踪。

作为一个简单的例子来看看:

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

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

虽然.then()处理程序使用与setTimeout()略有不同的调度程序,但原理是相同的。