如何找到罕见的错误?
我的应用程序包含一个错误,它使脚本无限期地运行。当我强制停止脚本时,所有jQuery UI元素都不会回应我的操作,也不会应用程序对按键的回答。如何找到罕见的错误?
如果我选择打开Firebug,它需要重新载入页面,并且所有当前的应用程序状态都会丢失。
事情是我不能再现这个bug,它有点让我发疯。如何找到并修复这样的浮动错误?
UPDATE。感谢你们所有人的建议。但问题是,我无法弄清楚错误何时发生,因此无法重现。这就是为什么标准程序不适用于我的情况。
我已经检查了每个while循环和递归函数调用,但还没有找出问题。
发布代码不是一个好主意 - 代码清单非常庞大而且相当复杂(游戏)。
可能的解决方案。我会遵循已发布的提示之一,并尝试对可能导致问题的所有功能进行操作。希望能帮助到你。
有处理这种方法主要有两种:
- Set break points并通过您的代码
- 开始步骤注释掉的代码的某些部分。一旦您注销了一个消除该错误的部分,就可以开始评论该部分的较小部分,直到您到达导致该问题的代码行。
它也可能有助于知道你在找什么。一个无限的运行脚本通常会产生以下两种情况之一:
- 一个永不终止的循环。
- 一个自称
密切注意这些东西可以帮助调试过程赶快去多一点的功能。祝你好运!
将代码分解成块并确定哪一个会导致失败。例如,如果您的表单中包含具有日期选取器和自动完成的多个字段,请逐一将它们分开。零引入谁是它的原因。
使用调试器时间轴。在时间线上记录您的网页表现,在您的网站周围巡游。你会在时间表中看到它花费的时间太长。浏览器可能会在您发现错误时崩溃,但您至少可以看到发生什么事的时间。
尝试重新创建您的操作。做一些分步清单,了解你如何浏览。这样,您可以在代码中追踪脚本在执行移动时可能采用的路径。如果只有JS有像PHP这样的后台跟踪,这会更容易。
尝试检查您的代码。像循环,递归或甚至两个互相调用的函数都可能导致这个永无止境的循环。
如果可以,请使用VCS工具,如SVN或GIT。您可以轻松构建n'破解代码,而不用担心丢失工作版本。如果您使用VCS,则可以轻松恢复。
我一直在寻找可能被频繁调用的函数或永不停止循环的循环。然后,跟踪您怀疑的功能/循环执行的次数。例如:
var runCount = 0;
function guiltyLookingFunction(params)
{
runCount++; //increase by 1 every time this function runs
if (runCount>1000) //if this has run some insane number of times
alert("this function is the that's running wild!");
//the rest of your function's code
//same thing with loops within functions:
var loopCount = 0;
while (0!=1) //this will always be true, so the loop won't stop!
{
loopCount++;
if (loopCount>1000)
alert("this loop is to blame!");
//the rest of your loop
}
}
(如果你正在监视多个犯罪嫌疑人与一些特定标识替换“这个功能/循环”)
A)使用WebKit的(Safari浏览器,铬,铬)检查,而不是萤火虫 - 无更多的重新加载,耶! B)沿着这种方式设置一些调试输出,这将有助于将问题缩小到犯罪者身上。
Firebug。重装?您是否尝试在页面加载之前打开Firebug ?
你可以发布你的代码? – 2012-03-11 10:21:52
+1。太多的问题只是要求问题的解决方案,而不是如何进行调试。 – maxedison 2012-03-11 10:24:19
请提供http://sscce.org/ :) – 2012-03-11 10:31:38