使用.NET Reflector單步調試編譯好的程序集

對於沒有任何源代碼和PDB文件的預編譯程序集而言,如果沒有合適的工具,調試起來並不容易。使用Red Gate的.NET Reflector可以在Visual Studio中即時反編譯程序集,然後像調試有源代碼的程序集一樣單步跟蹤它。

大家需要了解.NET Reflector(在VS和VSPro版本中)是可以集成到Visual Studio中的。標準的內置對象瀏覽器只顯示公有方法和類(見圖1),而.NET Reflector的對象瀏覽器(見圖2)可以對編譯好的程序集進行更爲深入的分析,可以讓用戶瀏覽內部類、方法和代碼。Red Gate .NET Reflector的Visual Studio插件能夠進行即時反編譯。要調試編譯好的程序集,用戶可以在解決方案瀏覽器窗口中右擊一個程序集,並選擇“Enable debugging”選項。.NET Reflector首先會嘗試定位本機上的PDB文件,如果沒有則會自己創建PDB文件,然後用戶就可以單步調試程序集代碼、設置斷點並使用常規的調試技術了(見圖4)。

(單擊圖片以放大)

圖1 內置的對象瀏覽器

(單擊圖片以放大)

圖2 .NET Reflector對象瀏覽器

圖3 啓用對編譯好的程序集進行調試的支持

(單擊圖片以放大)

圖4 調試編譯好的程序集

在Visual Studio中有了這種工具,在診斷第三方程序庫問題上花費的時間將會大大減少。

InfoQ記者Jonathan Allen寫到,

“在多團隊合作的項目中,我經常收到其他諮詢公司發來的編譯好的程序集,但是沒有源代碼。如果另一個團隊在國內的另一頭,甚至是世界的另一邊,光交流可能就要花掉我一天或更多的時間。我嘗試使用Reflector的調試器支持,並被它的表現震驚了。我能夠自己診斷問題,花不了多少時間就能讓測試服務器啓動並運行起來。

只有兩點我不太滿意。首先,它不能處理C++ CLI程序集。碰到這種程序集時,我只能使用JetBrain的dotPeek。其次,在沒有解決方案文件的情況下進行調試時,沒有一個明確的方式可以讓我打開任意程序集文件。我能夠很輕鬆地附到一個運行的進程上,但真正要看什麼時,還需要觸發一個異常。然後通過異常我才能在棧中上下定位,並在實際需要的地方設置斷點。”

.NET Reflector是通過一系列插件進行支持的,而且最近Red Gate也將流行的插件PowerCommands(該插件由Jason Haley提供)直接集成了進去(圖5)。

圖5 PowerCommands

Red Gate .NET Reflector是商業軟件。它會定期更新以保持與新技術和新工具的同步。7月22日,.NET Reflector 7.6.0.808版本已提供下載

Sergey Barskiy,作爲一個有多年Reflector使用經驗的.NET開發者,他寫到,

“當7.6版本發佈時,我非常激動。這個版本會提供對新技術的支持。當時微軟發佈了大量激動人心的產品和技術——Windows 8和WinRT庫、Visual Studio 2012、.NET 4.5和帶有新的異步功能的C# 5。這些新技術Reflector 7.6全部都支持。”

2011年3月14日,隨着.NET Reflector 7的發佈,Red Gate使它成爲了一個商業化產品,該公司的幾個競爭對手隨即免費發佈了他們的軟件,其中包括JetBrains DotPeekTelerik JustDecompileILSpyCodeReflect

JetBrains DotPeek(見圖6)是最先進的.NET反編譯器之一。它生成的代碼質量很高,它還會嘗試到源代碼服務器上抓取代碼。DotPeek的導航功能和快捷鍵非常便捷。它還能精確查找符號的使用,同時支持插件。DotPeek不能與Visual Studio集成。

(單擊圖片以放大)

圖6 DotPeek

Telerik JustDecompile是一個免費的.NET反編譯器,但是有商業化支持。它生成的代碼質量也很高。它可以爲反編譯程序集得到的代碼創建一個項目。JustDecompile提供了健壯的查找功能,能夠支持全文查找和符號使用查找。它還有一個插件系統,目前在Telerik的網站上有兩個可用的擴展。JustDecompile不能與Visual Studio集成。

(單擊圖片以放大)

圖7 JustDecompile

(單擊圖片以放大)

圖8 JustDecompile的查找對話框

ILSpy是唯一免費且開源的.NET反編譯器,它基於MIT許可證發佈。ILSpy的代碼生成和語法高亮功能做的非常好。對於反編譯的程序集,它既可以將其保存在一個文件中,也可以爲所有文件創建一個項目。ILSpy是一個獨立的工具,沒有Visual Studio集成。

(單擊圖片以放大)

圖9 ILSpy

CodeReflect相對於其他免費的或者商業的競爭產品,並沒有增加什麼功能。它是一個商業性維護的.NET反編譯器,特性集相對簡單,沒有多餘的功能。它提供了非常基本的代碼生成與語法高亮功能。它不能保存文件或創建項目。用戶只能將它反編譯生成的代碼複製出來。當然它也不能與Visual Studio 集成。

(單擊圖片以放大)

圖10 CodeReflect

不管用戶是否願意爲Visual Studio集成花錢,他們總可以在市場上找到合適的免費或付費的.NET反編譯器。

查看英文原文http://www.infoq.com/news/2012/08/precompiled-net-reflector

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章