我在调试代码和控制台时遇到了麻烦。跟踪函数的行为似乎很奇怪。
我有一个代码,如:
func1() {
console.trace("hey");
}
func2() {
func1();
}
func2();
结果日志如下所示:
"hey"
func1 @ script.js:2
如您所见,这并没有真正的帮助。如何解释这种行为呢?
虽然我不确定为什么console.trace()
的行为是这样的,但我确实找到了一个解决方案,因为我需要适当的堆栈跟踪。简单地用console.log(..., (new Error()).stack)
替换所有的console.trace(...)
调用导致堆栈跟踪工作,有时更详细。
在您的示例中,控制台的行为。跟踪([信息][…args)
const func1 = () => {
console.trace("hey");
}
const func2 = () => {
func1();
}
func2();
这里- func2被称为
- func2调用func1
- func1程序停止并发出堆栈跟踪。
Trace: hey
at func1 (/script.js:2:11)
at func2 (/script.js:6:3)
从上面的错误可以看出,func1被func2调用了。
由此我们了解了哪些函数相互调用。
我们还可以在
上看到函数存在的行号和文件最上面一行是我们传递的错误信息。
堆栈跟踪帮助我们了解导致错误的步骤。
现在我们知道堆栈跟踪是在func1中生成的。
这就是为什么func1显示在顶部。这将使我们的整个调试过程更容易。
const func1 = () => {
console.trace("hey");
}
const func2 = () => {
func1();
}
func2();
Trace: hey
at func1 (/script.js:2:11)
at func2 (/script.js:6:3)
从上面的错误可以看出,func1被func2调用了。
由此我们了解了哪些函数相互调用。
我们还可以在
上看到函数存在的行号和文件最上面一行是我们传递的错误信息。
堆栈跟踪帮助我们了解导致错误的步骤。
现在我们知道堆栈跟踪是在func1中生成的。
这就是为什么func1显示在顶部。这将使我们的整个调试过程更容易。
请参考:
- https://nodejs.org/api/console.html consoletracemessage-args
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack