当前位置:  开发笔记 > 编程语言 > 正文

是否可以使用window.onerror获取局部变量和参数值

如何解决《是否可以使用window.onerror获取局部变量和参数值》经验,为你挑选了2个好方法。

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

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

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

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

谢谢.



1> digitalextre..:

#1本地范围可以在onerror()没有黑魔法的情况下恢复吗?

如果this不受window.onerror()可直接访问的范围或周围变量的约束,则无法重新获得对已设置的变量的访问权限.

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

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

获取范围内的所有变量

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

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

换句话说,如果您可以访问有缺陷的变量,那么这可能是进入无限循环的一扇门:

    由于内容变化导致失败.

    错误处理程序触发

    跟踪变量的内容.

    由于内容变化导致失败.

    错误处理程序触发

    跟踪变量的内容.

    等等.


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

是.它可以.这可能是一个非常糟糕的主意(参见#1),但这是可能的.这是一个指向开始位置的指针:

有没有办法用函数包装所有JavaScript方法?

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



2> Tomalak..:

这甚至可能吗?

不会.堆栈跟踪证明堆栈已展开,所有堆栈帧及其包含的所有局部变量都消失了.至于获取变量的名称,这在运行时甚至是不可能的.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有