2012-02-09 33 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中。您可能將無效參數傳遞給函數。