gpt4 book ai didi

javascript - 以编程方式捕获 Chrome 异步 Javascript 堆栈跟踪

转载 作者:可可西里 更新时间:2023-11-01 01:54:18 25 4
gpt4 key购买 nike

我一直致力于为仅在 Chrome 上运行的 Web 应用程序添加一些更好的错误日志记录。本质上,我希望能够捕获和存储堆栈跟踪。对于同步代码,这工作正常,但对于异步代码,我遇到了一些奇怪的事情。本质上,Chrome 似乎会记录其他信息作为其异步堆栈跟踪功能的一部分,但我一直无法弄清楚如何捕获它。

代码,在 Chrome 浏览器控制台中运行:

let e;
let a = () => Promise.resolve(null)
.then(() => (null).foo)
.catch(err => {
console.info(err);
console.error(err);
e = err;
})
let b = () => a();
let c = () => b();
c();

输出:

(info)
TypeError: Cannot read property 'foo' of null
at <anonymous>:3:20

(error, after expanding)
TypeError: Cannot read property 'foo' of null
at <anonymous>:3:20
(anonymous) @ VM1963:6
Promise.catch (async)
a @ VM1963:4
b @ VM1963:9
c @ VM1963:10
(anonymous) @ VM1963:11

因此 console.error 为我提供了一个贯穿整个调用堆栈的堆栈跟踪,大概是通过某种形式的 Chrome 引擎魔法。 console.info 为我提供了存储在 err 上的实际堆栈跟踪。如果在这一切完成后我尝试读取 e 的值,它的堆栈是我从 console.info 语句而不是 console 获得的两行.error 语句。

我想问的是,有什么方法可以捕获和存储 Chrome 在我调用 console.error 时生成和使用的异步堆栈跟踪?

最佳答案

console.error() 似乎为了方便起见调用了 console.trace()

看起来脚本无法将堆栈跟踪作为字符串以外的任何内容获取。例如,err.stack 可以包含该字符串。 MDN 有 stack property of Error 的文档.它不是规范的一部分,但似乎在所有平台上都受支持。

关于javascript - 以编程方式捕获 Chrome 异步 Javascript 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136005/

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