2010-09-03 76 views
11

我有一個使用ext-js庫構建的系統。系統的一部分列出了流經在線商店的訂單。單擊一行時,會顯示其他訂單詳細信息。幾天前,一旦單擊一行,就會出現一條消息:「FIXME:created panelID ...」。之後,正常的功能仍在繼續,即錯誤信息只是令人討厭,並且在出現之後不會中斷正常執行。調試觸發警報的JS代碼()

我試圖調試JS代碼,看看在什麼情況下出現錯誤信息,即爲什麼它突然開始出現。我試圖用FireBug做到這一點。有沒有人有任何提示,我可以用來實現我的目標,建立哪一行代碼觸發警報()?關於此事的任何意見都非常感謝。

回答

15

Firebug有一個命令行API以編程方式創建斷點。例如:

debug(fn); 

爲功能fn創建了一個斷點。不幸的是,這不能用於具有本地代碼的函數(內置函數,如alert)。但是,你可以使用這個技巧。

在代碼中插入一個腳本塊這個腳本 -

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

你所做的事是重新定義window.alert用自己該做同樣的事情。

現在附加斷點與螢火蟲:

debug(alert); 

現在,下一次腳本調用警報,你會得到你的函數中設置斷點。然後,您可以分析堆棧跟蹤並找出它從哪裏調用。

+0

我不得不說的更多的跨瀏覽器的版本,這是血腥的輝煌!我不知道這種事情可以做到。你是冠軍! :) – doz87 2016-09-14 05:23:04

1

如果您能夠重新創建它,您可以在出現警告的位置放置一個斷點並查看堆棧跟蹤並找出路徑。

如果您不能重新創建它,您需要找到警報來自哪裏。之後,看看是什麼調用這個方法,看看需要設置什麼值。沿着路徑走,直到找到點擊事件。

調試JavaScript沒有真正的答案,因爲每個應用程序編碼都不同。很多時間是通過代碼遍歷代碼並確定它需要什麼路徑的手工勞動。添加手錶,console.log和警報將成爲您的朋友計算變量狀態。添加斷點並遍歷代碼。

+0

感謝您的意見。我正在嘗試做Chetan Sastry提出的建議。我正在得到'太多的遞歸',我會試着弄清楚自己。 – 2010-09-10 14:17:23

3

這裏的@扯談的答案

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