调试触发alert()的JS代码

13

我有一个使用ext-js库构建的系统。该系统的一部分是列出通过在线商店流动的订单。当点击一行时,会显示其他订单详细信息。几天前,一条消息“FIXME:created panelID…”开始在点击一行后立即出现。之后,正常功能继续执行,即错误消息只是烦人而已,并不会在出现后中断正常执行。

我正在尝试调试JS代码,查看在什么情况下会出现错误消息,即为什么突然开始出现。我正在使用FireBug进行调试。有没有人有任何提示,可以帮助我实现我的目标,确定哪一行代码触发了alert()?

非常感谢任何相关意见。

3个回答

17

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

debug(fn);

创建一个断点到函数fn。不幸的是,这不能用于具有本地代码的函数(内置函数,例如alert)。但是,您可以使用此技巧。

在您的代码中插入以下脚本块-

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

你所做的是重新定义了window.alert方法,使其具有与原方法相同的功能。

现在使用firebug在代码中设置断点:

debug(alert);

现在下一次脚本调用alert时,您将会在您的函数中得到一个断点。然后,您可以分析堆栈跟踪并找出它是从哪里调用的。


我必须说,这太棒了!我不知道这种事情可以做到。你是个冠军! :) - doz87

7
这是@chetan答案更多的跨浏览器版本。
        window.alert_ = window.alert;
        window.alert = function () {
            debugger;
            alert_.apply(window, arguments);
        };

1
如果你能够重新创建出问题,你可以在弹出警告的那一行设置断点,并查看堆栈跟踪,找出路径。
如果你无法重新创建问题,你需要找到警告来自哪里。然后查看调用该方法的内容,并查看需要设置哪些值。沿着这条路径一步步向上走,直到找到单击事件。
对于调试JavaScript,没有真正的答案,因为每个应用程序的编码方式都不同。很多时候,需要手动检查代码并找出它所采取的路径。添加监视器、console.logs和警告将成为帮助你了解变量状态的好工具。添加断点并逐步执行代码。

感谢您的输入。我正在尝试执行Chetan Sastry提出的建议。我遇到了“太多递归”的问题,我会自己解决。 - Boyan Georgiev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接