我有一个简单的javascript错误记录机制,它看起来像这样:
window.onerror = function (ErrorMsg, Url, LineNumber, Col, Error) { // ajax these to the server, including Error.stack}
问题是我还想在发生错误时获取局部变量和函数参数的值.这甚至可能吗?
我正在考虑修改Function原型,以便每次运行一个函数时,它的参数都存储在一个全局字符串数组中,然后错误处理程序只会将这个数组添加到ajax调用中.javascript可以这样做吗?
谢谢.
onerror()
没有黑魔法的情况下恢复吗?如果this
不受window.onerror()
可直接访问的范围或周围变量的约束,则无法重新获得对已设置的变量的访问权限.
您最想要访问的是this.arguments
或arguments
等效,但已被破坏.获得键值关联数组或类似哈希的对象的任何希望都将涉及元编程(即,读取函数定义以获取变量名称,并获取异常报告以尝试抢救数据).
有关类似内容的更多信息,请参阅此答案
获取范围内的所有变量
但这种"缺乏功能"是一件好事:
如果您可以访问您要求的内容,那么这可能是Javascript引擎中的错误.为什么?因为变量状态和内容本身是导致异常/错误的原因,所以假设错误的代码不是问题的开始.
换句话说,如果您可以访问有缺陷的变量,那么这可能是进入无限循环的一扇门:
由于内容变化导致失败.
错误处理程序触发
跟踪变量的内容.
由于内容变化导致失败.
错误处理程序触发
跟踪变量的内容.
等等.
是.它可以.这可能是一个非常糟糕的主意(参见#1),但这是可能的.这是一个指向开始位置的指针:
有没有办法用函数包装所有JavaScript方法?
从那里,你想要做的是推送this.arguments
或等效于一堆函数调用.但同样,由于许多原因,这种情况正在逼近疯狂.其中最重要的是需要复制所有值,以免引用变异变量,或者根本无法访问数据......就像我上面所说的那样,一般来说数据不好的问题.但仍然有可能.
这甚至可能吗?
不会.堆栈跟踪证明堆栈已展开,所有堆栈帧及其包含的所有局部变量都消失了.至于获取变量的名称,这在运行时甚至是不可能的.