在Visual Studio 2010中快速跟蹤和調試.Net程序
本文來自 51CTO 網站 作者:黃永兵
介紹
IntelliTrace(智能跟蹤)是微軟在Visual Studio 2010中引入的一個新功能,旨在加快調試跟蹤速度,它是通過減少開發(fā)人員的調試執(zhí)行步驟減少調試時間的。
傳統(tǒng)的調試程序允許開發(fā)人員在代碼中設置一個斷點,當調試程序命中這個斷點時,執(zhí)行過程就被暫停,這個時候,開發(fā)人員可以查看應用程序的狀態(tài)快照,包括各種變量,調用堆棧等。調試程序也允許一步一步朝前跟蹤應用程序的執(zhí)行,但它不知道在此之前發(fā)生了什么,也就是不能回溯跟蹤,因此程序前面執(zhí)行時暴出某些邏輯錯誤也不能跟蹤到,這個時候,開發(fā)人員不得不中斷調試過程,重新在代碼前面的某個位置設置一個新的斷點,再重新開始調試。
IntelliTrace除了具有傳統(tǒng)調試程序的功能外,它還可以向后一步一步回溯跟蹤到錯誤的發(fā)生地,在Visual Studio 2010中啟動調試會話后,IntelliTrace就開始收集數據,它在一個擴展名為.iTrace的文件中存儲它收集到的數據,更酷的是可以將這個文件發(fā)給你另一個人,他可以在他的Visual Studio 2010環(huán)境中回顧這次會話。
我們還是以一個例子來看看IntelliTrace的詳細用法,我們創(chuàng)建了一個Windows窗體應用程序(一個利息計算器),它需要接收來自用戶輸入的本金和持有天數,計算并顯示利息,并在同一個窗體中顯示最終的合計金額,除Windows窗體外,我們創(chuàng)建了兩個組件,第一個組件處理持有時間,因此它是一個天數,第二個是數據訪問組件,從數據庫獲取利息率,將其提供給第一個組件,根據計算,我們預計180到360天的利息率是4.5%,最高可達5%,當開發(fā)人員輸入361到364天作為持有期時,返回的年利息率仍然是4.5%,我們需要調試代碼揪出錯誤源。
調試前的準備工作
首先我們檢查一下是否啟用了IntelliTrace,點擊“工具”*“選項”*“ IntelliTrace”,如下圖所示:
圖 1檢查是否啟用IntelliTrace
默認情況下,IntelliTrace只收集IntelliTrace事件數據,以保持數據最小化,為了了解默認啟用了哪些IntelliTrace事件,請點擊“IntelliTrace事件”子菜單。
圖 2IntelliTrace事件列表
我們可以根據需要有選擇性地選中列表中某些項目。接下來點擊“模塊”子菜單,在這里我們可以配置要收集哪些模塊的數據,或排除哪些模塊,默認情況下,所有微軟默認創(chuàng)建的模塊都被忽略掉,因為在我們的程序中這些模塊不需要被跟蹤。
圖 3配置跟蹤或排除哪些模塊
有了這個配置功能后,我們返回到“常規(guī)”子菜單中,這時我們可以選擇收集IntelliTrace事件和調用信息,如下圖所示:
圖 4設置調試時收集IntelliTrace事件和調用信息
接下來點擊“高級”子菜單,我們發(fā)現,默認情況下,IntelliTrace將數據存儲在“C:\Documents and Settings\All Users\Application Data\Microsoft Visual Studio\10.0\TraceDebugging”,為了以后復制方便,我們將其修改為“c:\ IntelliTrace Records”,這里需要注意的是IntelliTrace會為每個調式程序會話創(chuàng)建一個數據文件,它使用FIFO(先進先出)原則維護這些文件,當Visual Studio關閉時,它會刪除所有文件,這意味著如果我們想要在Visual Studio關閉后仍然保留這些文件,必須在Visual Studio打開時進行復制。另外,我們也設置了每個數據文件的最大尺寸,如下圖所示:
圖 5設置IntelliTrace數據文件存儲參數
在這里你應該看到有一個選項“調試時是否啟用Navigation Gutter(導航條)”,在調試時可以通過它上面的圖標做上下調用的切換,并可以通過它直接進入被調用的方法內部。
開始調試
至此,IntelliTrace設置完畢,我們可以按以往的調試方法開始調試了,我們設置本金為10000,持有期為361天,當我得到利息和合計金額時,我們發(fā)現利息率應該是5%。
圖 6開始調試
在窗口右側我們看到有一個文本鏈接“全部中斷”(Break All),當我們點擊該鏈接時,調試程序打開IntelliTrace窗口,并暫停了調試執(zhí)行過程。
圖 7調試過程暫停
點擊上圖中所示的“切換到調用視圖”(Switch to call view)鏈接,顯示調用信息,并在窗口左側顯示了一個導航圖標。
圖 8調用視圖
當我們點擊這個導航圖標時,它打開導航條,導航到調用。
圖 9打開導航條
導航條上顯示了五個圖標,它們的含義分別是(從上到下):
1、返回調用位置;
2、轉入上一個調用或IntelliTrace事件;
3、在調用中前進一步(F11);
4、轉入下一個調用或IntelliTrace事件;
5、切換到實時調試(Live Debugging)。
圖 10切換到實時調試
現在我們就可以跨組件在方法調用中前進和后退了。
圖 11調試時可前進和后退了
查看變量,Autos,Locals,Watches和調用堆棧的值,我們終于找到了問題的起因。
圖 12查看Locals值
調試結束后的事情
現在我們停止調試程序,如果想保留由IntelliTrace存儲的數據,直接打開前面配置的數據文件存放目錄,將最新的數據文件拷貝到另一個文件夾中即可,拷貝完畢后就可以安全地關閉Visual Studio 2010了。
如果我們雙擊這個iTrace文件,系統(tǒng)會調用Visual Studio 2010來打開它。
圖 13打開后的iTrace文件
如果我們在圖中所示的線程列表中雙擊任一線程,Visual Studio就會重新打開該線程對應的會話。例如下圖是我們在主線程上雙擊打開的會話,我們可以打開調用視圖,設置調試上下文。
圖 14重新打開的主線程會話
如果此時程序處于打開狀態(tài),我們可以繼續(xù)在同一個會話中工作。
對于ASP.NET程序,IntelliTrace的工作方式基本相同,收集的事件更詳細了。
圖 15IntelliTrace 也支持調試ASP.NET應用程序
總結
IntelliTrace是一個徹底改變調試過程的功能,它提高了開發(fā)人員調試程序的效率,如果是一個很難檢測到的bug,可以通過收集調試數據,保存到iTrace文件,將其發(fā)送給專家?guī)湍阏{試。IntelliTrace的設置選項也非常豐富,允許我們按照自身的需求優(yōu)化IntelliTrace會話。