5

這是一個相當複雜的問題,目前可用的方法可能根本不可能,但如果有一個簡單的方法,這將是巨大的。Javascript中的非破壞斷點(trace points)?

我正在調試Chrome中的一些JavaScript,並且因爲它是非常事件驅動的,所以我更願意獲取代碼的跟蹤報告(被調用的內容等)而不是斷點。因此,無論我離開斷點,我都希望看到本地函數名稱和參數。

我能得到的最接近的是在刪除一個條件斷點,如下所示:

Sample trace

有兩個大問題,這種方法:

  1. 粘貼到這個每個斷點太麻煩了。如果可以將其選作每個斷點的默認操作,則人們更有可能使用它。
  2. 在谷歌瀏覽器中,日誌調用被激發兩次。

任何想法克服這些問題?我認爲這可能在IE with VS,但在那裏的用戶界面似乎同樣繁瑣。

+1

如果你只是需要這個來跟蹤DOM事件,你可以嘗試使用控制檯的''monitorEvents()'](http://www.briangrinstead.com/blog/chrome-developer-tools-monitorevents)方法。 – kpozin 2012-05-05 23:22:59

+0

我實際上曾嘗試在一個點上使用monitorEvents,通過爲非DOM對象拋出僞事件。你可以通過監視錯誤獲得相當的效果,但它沒有我需要的細粒度過濾。 – Chris 2012-05-07 01:53:35

回答

0

我找不到這樣做,所以我wrote my own

現在,我不再不斷地插入和刪除console.log調用,而是在必要時離開登錄並僅監視它。

警告:下面的特定代碼未經測試。

var debug = TraceJS.GetLogger("debug", "mousemove"); 
$('div').mousemove(function(evt) { 
    debug(this.id, evt); 
}); 

每次鼠標移過一個DIV,它生成一個LOGEVENT標記的[「鼠標移動」,{該元素的ID}]

有趣的部分是能夠選擇性觀看事件。當你想只看到元素#A mousemove事件時,調用控制檯以下:

TraceJS('a'); 

當我想看到所有mousemove事件時,您可以撥打:

TraceJS('mousemove'); 

只有事件顯示匹配你的過濾器。如果您調用TraceJS(無參數),則會停止顯示日誌調用。

1

我發現的最佳選擇是在Chrome的Javascript面板中編輯javascript代碼,添加一個console.log。

它只會在加載頁面後才起作用(除非您可以承受在刷新後放置斷點並添加記錄行)並且(更糟糕的是)每次重新加載時都必須執行該操作頁。

祝你好運與您的搜索!

1

IE11現在具有「跟蹤點」,獨立於Visual Studio。他們正是你三年前所要求的。我沒有在Chrome或其他瀏覽器中看到他們,但希望他們能很快趕上!

+0

酷! https://msdn.microsoft.com/en-us/library/ie/dn255007(v=vs.85).aspx我其實很喜歡我現在建立的圖書館,因爲我可以隨時留下痕跡點,並將它們根據需要打開和關閉。猜猜這會發生。 – Chris 2015-03-25 21:51:26