Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调试触发警报的JS代码()_Javascript_Debugging_Firebug - Fatal编程技术网

Javascript 调试触发警报的JS代码()

Javascript 调试触发警报的JS代码(),javascript,debugging,firebug,Javascript,Debugging,Firebug,我有一个使用ExtJS库构建的系统。系统的一部分列出了通过在线商店的订单。单击行时,将显示其他订单详细信息。几天前,单击一行时,一条消息开始显示“FIXME:created panelID…”。在此之后,正常功能将继续,即错误消息只是令人恼火,在出现后不会中断正常执行 我试图调试JS代码,看看错误消息是在什么情况下出现的,即为什么它突然开始出现。我正试着用FireBug来做这件事。有没有人可以提供一些技巧来实现我的目标,即确定哪一行代码触发警报()? 非常感谢您对此事的任何意见。Firebug有

我有一个使用ExtJS库构建的系统。系统的一部分列出了通过在线商店的订单。单击行时,将显示其他订单详细信息。几天前,单击一行时,一条消息开始显示“FIXME:created panelID…”。在此之后,正常功能将继续,即错误消息只是令人恼火,在出现后不会中断正常执行

我试图调试JS代码,看看错误消息是在什么情况下出现的,即为什么它突然开始出现。我正试着用FireBug来做这件事。有没有人可以提供一些技巧来实现我的目标,即确定哪一行代码触发警报()?
非常感谢您对此事的任何意见。

Firebug有一个命令行API,可以通过编程方式创建断点。例如:

debug(fn);
为函数
fn
创建断点。不幸的是,这不能用于带有本机代码的函数(内置函数,如
警报
)。但是,您可以使用此技巧

使用此脚本在代码中插入脚本块-

window.alert_ = window.alert;
window.alert = function() {
    alert_.apply(window,arguments)
};
您所做的是用自己的window.alert重新定义window.alert,它也会做同样的事情

现在,在firebug中附加断点:

debug(alert);

现在,下次脚本调用警报时,您将在函数中获得一个断点。然后,您可以分析堆栈跟踪并找出调用堆栈跟踪的来源。

如果您能够重新创建堆栈跟踪,您可以在警报出现的行上放置一个断点,查看堆栈跟踪并找出路径

如果无法重新创建,则需要找到警报的来源。之后,查看调用该方法的内容,并查看需要设置哪些值。沿着路径一直走,直到找到单击事件


调试JavaScript并没有真正的答案,因为每个应用程序的编码都不同。很多时候,这是一项手工劳动,需要遍历代码并找出它的路径。添加手表、console.log和警报将有助于您了解各种状态。添加断点并遍历代码

以下是@chetan答案的更多跨浏览器版本

        window.alert_ = window.alert;
        window.alert = function () {
            debugger;
            alert_.apply(window, arguments);
        };

谢谢你的意见。我正试图按照契丹·萨斯特里的建议去做。我得到了“太多的递归”,我会自己去弄清楚。我必须说,这太棒了!!我不知道这样的事情可以做。你是冠军!:)