程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 使用IntelliTrace在Visual Studio 2010中調試.NET應用程序

使用IntelliTrace在Visual Studio 2010中調試.NET應用程序

編輯:關於.NET

在Visual Stuido 2010中有一個新的功能那就是IntelliTrace.IntelliTrace被引入到Visula Studio中來加速我們對.NET應用程序的調試,它通過對預先設置的事件和方法在運行過程中的跟蹤並將其有效地傳遞給調試執行者,從而快速的傳遞程序在執行過程中的狀態和各種信息來幫助開發者更好的調試程序,快速的發現問題。實際上,在Visual Studio 2010之前,Microsoft Visual Stuido已經幫助我們很好的繼承了調試工具,比如對變量的監控,對堆棧的查看等等,並且允許設置斷點進行單步調試等。所有的這些都在很好的幫助開發者來了解程序在不同的執行過程中的狀態以及檢測是否按照預先實際的邏輯進行運轉,而且更多的,我們通過斷點後監測程序狀態來發現問題所在。而這樣所存在的問題是,一些邏輯上的錯誤可能發生在斷點執行之前,而且很可能是一些無法追查。開發者必須停止當前的調試,重新設置斷點並啟動調試,而這樣的試驗過程往往需要很多次才能找到正確的位置來設置斷點。

IntelliTrace都收集哪些數據?

那麼IntelliTrace帶給我們了什麼?顧名思義,它智能的將一些調試信息和程序狀態自動的跟蹤並實施的展現給開發人員,從而減少了需要程序員找到適當的斷點才能跟蹤和監控程序運行狀態的過程。那麼這些信息到底有什麼用呢?IntelliTrace又到底搜集了哪些數據呢?這取決於我們通知 IntelliTrace進行收集的數據類型和對其大小的控制,這樣IntelliTrace會按照我們期望的方式去收集部分數據而不是所有在即時調試過程中的程序狀態信息。Visual Studio提供給我們兩個方式來控制其搜集信息的內容源,一個是IntelliTrace events only,僅僅收集智能跟蹤事件和調試中斷的相關數據;另外一個是IntelliTrace events and call information,這個就會收集除了IntelliTrace事件之外對一個方法調用的進入和退出的各種數據。下邊我們來看看在Visual Studio 2010中如何設置IntelliTrace的跟蹤選項。

首先我們需要檢查IntelliTrace功能在Visual Stuido 2010中是打開的。在Visual Studio 2010中選擇”Tools | Options…”打開選項對話框,並選擇”IntelliTrace | General”. 確保Enable IntelliTrace是被選中的。

Figure 1: Visual Studio 2010 IntelliTrace settings.

默認情況下,IntelliTrace僅僅收集IntelliTrace相關的事件,這樣是為了保持所收集的數據較少,並且對於性能上的影響是最小的。而當你選擇對方法調用的數據也進行搜集時,除了其臨時搜集的數據所占用空間的增大外,對於性能的影響也是較大的。盡管收集到的細節有所不同,但兩種方式都會收集一些共同的數據。比如,它總會在第一次啟動收集過程時收集系統信息,模塊的加載和卸載事件,線程的起始和結束時間等。隨著模塊和線程的事件,可以正確的更新模塊和線程調試窗口的信息。另外,任何模式下,在調試斷點處也會對數據進行收集,並將所收集到的基本數據類型和對象在調試其中進行檢查和審閱,並允許改變其值。

Figure 2:IntelliTrace in Visual Studio 2010

IntelliTrace Events

那麼什麼是IntelliTrace事件呢?簡單的說就是程序員在調試程序的過程中可能會感興趣的特定的點。例如打開一個文件,更改注冊表信息,點擊表單上的某個按鈕,甚至於數據綁定等等。IntelliTrace的事件會以競爭的方式來最終決定被放置的位置,但是這個位置不能是過於頻繁的被調用而可能導致程序性能明顯降低的地方。

當你用Visual Studio 2010打開一個項目並且啟用IntelliTrace功能時,當調試器在斷點停下時你會看到IntelliTrace的信息。下圖是我在設置了對文件的訪問作為IntelliTrace事件時IntelliTrace搜集的數據:

Figure 3: 對IntelliTrace事件相關數據的收集

如何去更改IntelliTrace事件呢?對於默認的IntelliTrace events,文件訪問是不被納入的。但你可以通過對IntelliTrace的設置來改變對你感興趣的事件信息的收集,來加速你的程序調試。選擇”Tools | Options… | IntelliTrace | IntelliTrace Events”,在右邊的列表中選擇感興趣的事件即可。

Figure 4:配置IntelliTrace事件

需要注意的是,添加的事件越多,IntelliTrace需要收集的數據就會越多,提供給你的信息就越多,而且數據占用的空間也會越多。這是需要權衡的,尤其是對於特別大的項目,一旦你的設置過於繁瑣,可能會讓機器處於嚴重的停滯狀態。另外,在Modules選項中,你還可以通過多模塊的過濾來達到只收集你最關心的數據程序狀態的目的,這樣避免了IntelliTrace對所有組件的相關事件都進行收集的情況。

Figure 5:設置IntelliTrace跟蹤的模塊

IntelliTrace到底可以幫助我們做什麼?

在Advanced選項中,可以定義每次智能跟蹤的數據的存儲大小和位置。IntelliTrace會收集在調試過程中程序的運行狀態,這些狀態存到哪兒,以什麼樣的方式存儲呢?答案就在Advanced選項。

Figure 6:IntelliTrace數據的存儲位置和大小

首先可以選擇跟蹤的數據的存儲位置,默認是存儲在C:\ProgramData\Microsoft Visual Studio\10.0\TraceDebugging位置並以每個跟蹤文件最大250M的方式存儲為.iTrace文件。位置和對於每個文件的大小都可以做調整。那麼iTrace文件到底是什麼呢? iTrace文件是一個可以被Visual Studio所識別的文件,它記錄了本次跟蹤過程中程序執行的時間線,線程,異常,系統信息和相關模塊。

Figure 7:IntelliTrace文件的信息

有意思的是,這和你在IntelliTrace窗口中看到的信息是一致的,並且可以隨時映射到所對應的調試會話中。例如,在Exception Data部分,當我們發現一個異常時,我們可以清楚的看到這個異常的信息以及詳細的Call Stack。

Figure 8:IntelliTrace對程序調試的幫助

雙擊異常,或者點擊異常下方的Start Degugging按鈕可以恢復此次跟蹤所對應的調試會話,並直接定位到異常位置。並且在右邊的IntelliTrace窗口中可以完整而清楚的看到此次程序運行過程中各種事件的相關數據,以此來更清楚的還原現場並幫助找出問題。

Figure 8:IntelliTrace幫助定位問題及還原現場

至此我們終於知道了IntelliTrace不僅僅只是給我們收集了數據,更是為我們將這些數據與程序狀態和各個事件相關聯,快速的幫助我們定位問題,以此來加速程序調試。其實在Microsoft Test Manager中也適用了IntelliTrace技術來幫助我們做相關測試,但這是後話。

IntelliTrace events and call information

當設置IntelliTrace不僅跟蹤相關的事件,並且跟蹤對每個方法的訪問時你可以清楚的看到整個程序在運行過程中是如何對不同的方法及對象進行實例化、相互調用,線程調度的時間線等等。好比描繪了一個程序的流程圖,讓你可以清楚的在各個調用間導航來找到你感興趣的信息。並且,隨著在Call View窗口中在不同的調用間導航,你可以清楚的知道每一次調用所對應的位置(除部分不可見的Code外),以此來更好的了解程序流程。

Figure 9:通過Call View窗口來觀察程序中的方法調用

IntelliTrace是一個幫助我們更好的調試程序,發現問題並解決問題的工具,並且還可以靈活的定義對於所感興趣的事件和數據的收集,將會在開發過程中扮演越來越重要的角色。另外,你還可以自己定義IntelliTrace的事件呢。怎麼樣,快去使用它吧:)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved