2012-02-09 62 views
2

我需要帮助。我的代码中有一个Heisenbug。它只是偶尔出现,不能刻意触发。如何在jQuery脚本中追踪Heisenbug?

萤火在我抛出喜欢“无效或非法字符串指定”的例外,是指内部的jQuery 一条线,看起来像这样:

} else { 

不管怎样,我会很感激任何一种帮助!我已经尝试过使用FireQuery,但是会干扰我的代码,所以它是无法选择的。

//编辑:提到的位置是跳来跳去,没有提及错误本身。

//编辑:我跟踪它到一条线,看起来像这样:

context.fillText("[[*longtitle]]", x + 4, y + h + 15, w); 

我使用镆铘CMS构建网站(这就是[* longtitle]]和[ [* id]]和东西来自;他们是模板占位符)。以下是此线路的全部功能:

($("imagecvs-[[*id]]").ready(function() { 
    var canvas = $("#imagecvs-[[*id]]").get(0); 
    if (canvas.getContext) { 
    var context = canvas.getContext('2d'); 
    var img = new Image(); 

    img.src = "[[*Photo]]"; 

    var scale = 0.6; 
    var ratio = img.width/img.height; 

    var w = Math.min(img.width * scale, 120); 
    var h = w/ratio; 
    var x = 0; 
    var y = (canvas.height/2.0) - (h/2.0); 

    var deg = -8; 
    var rad = (deg * Math.PI/180); 
    // y += (h/2) * -Math.sin(rad); 
    context.rotate(rad); 

    context.fillStyle = "#FFF"; 
    context.fillRect(x - 5, y - 5, w + 10, h + 30); 
    context.drawImage(img, x, y, w, h); 

    context.font = "Italic Bold 10px Serif"; 
    context.textAlign = "left"; 
    context.textBaseline = "ideographic"; 
    context.fillStyle = "#000"; 
    context.fillText("This is a test", x + 4, y + h + 15, w); // Exception thrown here; even with 'This is a test' 
    } 
    return true; 
    })); 

一些更多信息:我正在使用FireFox 10.0。该网站位于http://www.roboter-club-hamburg.de

+1

该行上面和下面的代码是什么? – 472084 2012-02-09 10:45:40

+0

将您的代码粘贴到[JS Lint](http://jslint.com/)中并修复它报告的错误(或者回过头来问问关于*为什么* JS Lint抱怨错误如果您不明白报告)。 – 2012-02-09 11:00:15

+0

嗯,它不只是一个海森伯格。它也离我而去。现在我在一个完全不同的地方得到了同样的例外。这里是错误信息现在在FireBug中的样子:http://imageshack.us/photo/my-images/17/jqueryerror.jpg/ – 2012-02-09 11:01:02

回答

2

好吧,我找到了这个错误的原因。这是因为图像(img)有时在剧本询问其宽度和高度时未完全加载的事实。因此,两者都是NaN并且脚本崩溃了(fillText显然不能用NaN宽度工作)。

现在,我所做的所有解决此问题的方法是将绘图步骤移动到img的onload回调中。这样可行。这个Heisenbug不在了。

非常感谢!

0

我现在没有如何在FireBug中做到这一点,但在WebKit Web Inspector(here for FireBug)中,您可以选择突破异常。

比你可以看看调用堆栈,看看你的代码调用这个JQuery代码。我不认为这个问题出现在JQuery中。您可能将无效参数传递给函数。