Firebug 2.0 即將於 6/10 登場,底層引擎換成 JSD2,可望解決這段時期常感受到的龜速、死雞、蟲蟲問題,感謝 Firebug Team 的努力!

Getfirebug blog 對每個 beta 發行都有相關介紹,爬文請見 Firebug Releases


UI 改善

支援 Australis,把 Firebug 整合到新的 Firefox 選單按鈕,在不同 OS 也有與系統原生介面相合的設計了。

不過比起 Australis,更實用的還是其他細節的改善,例如「主控台」面板右上角多了一顆小箭頭,用途是「開關指令碼編輯器」,雖然跟右下的紅箭頭功能相同,但介面跟其他面板「開關側面板」的按鈕更一致,我現在幾乎不會按舊的按鈕了。

新版介面

舊版擷圖 舊版介面

主控台 log 合併的計數顯示,也改為放在左邊;

log 合併

舊版放在右邊,比較不容易看。
舊版的 log 合併


即時語法上色 (syntax highlighting)

Script 面板終於有顏色了!
(擷圖左邊是舊版,右邊是 2.0) Script 語法上色
Script 語法上色(逐步除錯中)

HTML、CSS 面板的「即時編輯」也一樣,按 Enter 換行時也會自動縮排,更像一般編輯器了。
CSS 語法上色
HTML 語法上色


Script 面板的 Pretty Print 功能

按一下「{}」按鈕就能把壓縮過的 JS 轉為易讀的格式。

Pretty print


檢測/修改函數的 return value

導入 JSD2 後,可以在 return statement 作逐步除錯了,如下圖在 return 行放中斷點,中斷後再 Step Over (F10) , debugger 會停在同一行,但右邊「監看」面板會得到 foo() 的回傳值,而這個值也可以當場編輯。

檢測 return

可以在 Getfirebug 的 DEMO 頁試試: Issue 6857: Give the ability to modify the returned value


自動完成

命令編輯器(Command Editor)可以按 Tab 自動完成。

指令碼編輯器的自動完成

設定中斷點條件時,也能自動完成該 scope 中的變數。

中斷點條件設定的自動完成


錯誤、中斷點相關改善

2.0 對「在所有錯誤中斷」和「在這個錯誤中斷」(就是放置中斷點)功能作了一些修正。

Thanks to JSD2 API Firebug could finally implement it correctly.

不是新功能,應該只是修正而已。

在所有錯誤中斷
放置中斷點

另外新增了「在例外中斷」功能,也能「忽略已捕捉的例外」忽略程式中已有 catch 區段的例外。

在例外中斷


Script 面板的其它改善

  • 滑鼠 hover 語句時顯示(運算值)預覽的行為,變得比較細緻。
  • Script 中的物件都能檢測,也能「在命令列中使用」(舊版曾有此功能,但常出錯)。
  • 滑鼠選擇起來的 expression 片段也能檢測,也能在命令列中使用。

HTML 面板可以使用正規表示搜尋

正規表示搜尋


以 JSON 格式匯出 cookie

註:需要自己在 about:config 打開 extensions.firebug.cookies.jsonClipboardExport 才能使用。

匯出為 JSON


Console API in Web Workers

Worker thread 中也能使用 console.log 等方法。


檢測 DOM 事件

繼 Firecookie 被整併後,EventBug 也變成 Firebug 的一部分了。

HTML 面板新增的「事件」側板會列出 DOM 節點上有效的事件監聽器(event lisenter), 顯示事件類型、函數名稱、是否 useCapture 等資料。

列出的監聽器,除了元素上用 addEventListener 註冊的「直接」監聽器之外, 若事件 bubble 上去有其它 target 監聽,就會以「監聽器 來自 div#foo」(原文 "Listeners from")型式列出。

另外還有註冊於 window、document 上的監聽器,因為無法在 HTML 面板找到元素,所以不管檢測什麼節點時都會列出,顯示為「其它監聽器 Window」(原文 "Other listeners for")型式。

其它監聽器

點函數名稱會跳到 Script 面板;也可以像 CSS 一樣,在名稱前面按一下就啟用/停用監聽器。


監聽器的 wrapped function 顯示

使用一些 JS library 監聽事件時,例如 jQuery 的 element.on('click', handler),實際綁在元素上的將不是 handler 本身,而是一個把 handler「包」起來的 wrapper 函數,事件發生時,再由 wrapper 呼叫 handler 並把結果回傳。

問題是我們除錯時,通常對 wrapper 函數沒興趣,「被包裹」的 handler 才是我們想看的東西, 這時就可以開啟「顯示被包裹的監聽器」選項,Firebug 就會連被包裹的函數也一起列出來了。

顯示 wrapped 函數
wrapped 函數

若 handler 是採用 jQuery 綁在上層元素,但只對特定 selector 起反應的 delegation 方式,Firebug 也會把「jQuery selector filter」標示出來。

jQuery selector filter


Firebug 2.0 只支援 Firefox 30 以上的版本,而 Fx 30 目前也在 beta,預定 6/10 釋出。 若想試試 Firebug 2,就安裝 beta channel 的 Firefox 30 吧。