gpt4 book ai didi

javascript - 是否可以通过 window.onerror 获取局部变量和参数值

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

我有一个简单的 javascript 错误记录机制,它看起来有点像这样:

window.onerror = function (ErrorMsg, Url, LineNumber, Col, Error) {
// ajax these to the server, including Error.stack}

问题是我还想在发生错误时获取局部变量和函数参数的值。这可能吗?

我正在考虑修改 Function 原型(prototype),以便每次运行一个函数时,它的参数都存储在一个全局字符串数组中,然后错误处理程序只会将这个数组添加到 ajax 调用中。 JavaScript 可以做到这一点吗?

最佳答案

#1 是否可以在 onerror() 中恢复本地作用域而不使用黑魔法?

如果 this 没有被绑定(bind)在 window.onerror() 的范围内,或者没有直接访问周围的变量,就不可能重新获得对您设置的变量的访问权。

您最想访问的是 this.argumentsarguments 或等效项,但已被破坏。任何获得键值关联数组或类哈希对象的希望都将涉及元编程(即读取函数定义以获取变量名称,并获得异常报告以尝试挽救数据)。

有关类似内容的更多信息,请参阅此答案:

但这种“缺乏功能”是一件好事:

如果您能够访问您所请求的内容,那很可能是 Javascript 引擎的错误。为什么?因为变量状态和内容本身是导致异常/错误的原因,所以假设错误代码不是问题的开始。

换句话说,如果您可以访问错误变量,那可能是进入无限循环的大门:

  1. 由于内容可变而失败。
  2. 触发了错误处理程序。
  3. 跟踪变量的内容。
  4. 由于内容可变而失败。
  5. 触发了错误处理程序。
  6. 跟踪变量的内容。

#2 Javascript 可以存储 voodoo 调用的每个函数的所有参数吗?

是的。它可以。这可能是一个非常的坏主意(参见#1),但这是可能的。这是关于从哪里开始的指针:

从那里开始,您想要做的是推送 this.arguments 或等效于一堆函数调用。但同样,出于多种原因,这正接近疯狂。其中最重要的是需要复制所有值,以免引用变异变量,或者根本无法访问数据……就像我上面说的,坏数据的问题一般来说。但是,这仍然是可能的。

关于javascript - 是否可以通过 window.onerror 获取局部变量和参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094145/

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