談談Visual Studio 2010- IntelliTrace(智能跟蹤)
Visual Studio 2010 Ultimate 版本有個新功能IntelliTrace(智能跟蹤),IntelliTrace被引入到Visula Studio中來加速我們對.NET應用程式的調試,它通過對預先設定的事件和方法在運行過程中的跟蹤並將其有效地傳遞給調試執行者,從而快速的傳遞程式在執行過程中的狀態和各種資訊來協助開發人員更好的偵錯工具,快速的發現問題。實際上,在Visual Studio 2010之前,Microsoft Visual Stuido已經協助我們很好的繼承了調試工具,比如對變數的監控,對堆棧的查看等等,並且允許設定斷點進行單步調試等。所有的這些都在很好的協助開發人員來瞭解程式在不同的執行過程中的狀態以及檢測是否按照預先實際的邏輯進行運轉,而且更多的,我們通過斷點後監測程式狀態來發現問題所在。而這樣所存在的問題是,一些邏輯上的錯誤可能發生在斷點執行之前,而且很可能是一些無法追查。開發人員必須停止當前的調試,重新設定斷點並啟動調試,而這樣的實驗過程往往需要很多次才能找到正確的位置來設定斷點。IntelliTrace智能的將一些調試資訊和程式狀態自動的跟蹤並實施的展現給開發人員,從而減少了需要程式員找到適當的斷點才能跟蹤和監控程式運行狀態的過程。
Visual Studio提供給我們兩個方式來控制其搜集資訊的內容來源,一個是IntelliTrace events only,僅僅收集智能跟蹤事件和調試中斷的相關資料;另外一個是IntelliTrace events and call information,這個就會收集除了IntelliTrace事件之外對一個方法調用的進入和退出的各種資料。下邊我們來看看在Visual Studio 2010中如何設定IntelliTrace的跟蹤選項。
進入到工具 --> 選項 --> IntelliTrace。它在預設狀態下是啟用的,但是,僅捕捉事件,因為捕捉事件是便宜的。然而,當你開始跟蹤所有這些調用資訊時,真正的價值開始顯現出來了。你每一次調試的時候,IntelliTrace都將彈出來,你在動態調試的時候可以使用這個曆史性的調試工具。假如我在那裡並且有一個斷點,但是,我要備份和重新設計這個斷點,我可以使用IntelliTrace完成這個任務。
使用IntelliTrace捕捉到調試進程的其他人可以把記錄以及.dlls和pdbs檔案發送給你,你可以重放它們的進程。這個進程也許進入到資料庫(你沒有這個資料庫),它也許是採用你不能複製的方法設定的,它可能在你不能企及的網路上,但是,你不用擔心,因為你擁有記錄以及.dlls和pdbs檔案,你可以重放。
當然,擁有原始碼會更好,因為那樣你就能夠看到這個代碼好像是在你自己的機器上調試它一樣。這對於在你的機器上運行正常,在其他人的機器不能啟動並執行那些神秘的故障來說是非常好的。它對於多線程的情況也是非常好的,當你經過這個應用程式的時候,這個軟體瑕疵就消失了,但是,在正常速度運行時,這個軟體瑕疵又出現了。
預設情況下,IntelliTrace僅僅收集IntelliTrace相關的事件,這樣是為了保持所收集的資料較少,並且對於效能上的影響是最小的。而當你選擇對方法調用的資料也進行搜集時,除了其臨時搜集的資料所佔用空間的增大外,對於效能的影響也是較大的。儘管收集到的細節有所不同,但兩種方式都會收集一些共同的資料。比如,它總會在第一次啟動收集過程時收集系統資訊,模組的載入和卸載事件,線程的起始和結束時間等。隨著模組和線程的事件,可以正確的更新模組和線程調試視窗的資訊。另外,任何模式下,在調試斷點處也會對資料進行收集,並將所收集到的基礎資料型別 (Elementary Data Type)和對象在調試其中進行檢查和審閱,並允許改變其值。
總的說來IntelliTrace偵錯工具就是為程式開發人員量身定製的,通過其獨特的“曆史調試”功能,為開發人員提供了一個反悔追溯過程式控制制功能。比如,在開發中程式在10分鐘前出現一個異常,怎麼辦呢,如果在以前一般是通過手動調用Debug.Write語句,現在不必了!因為不少開發工具中的這種曆史調試功能都非常相似,在VS2010 正式版 中通過IntelliTrace,不但能使程式員看到程式的當前狀況,也可以檢查某些情況下產生的事件,甚至還能隔離應用程式記錄中的故障點。所以,啟用曆史調試之後,VS2010 正式版能夠捕獲呼叫堆疊以及相關變數,咱們就可以“回退”至程式的儲存前10分鐘或者更長時間,檢查程式發生異常、故障時的各種情況。因為,在預設情況下程式只儲存關鍵的類型,而開發人員可以選擇記錄所有的參數,對象以及全域變數。所以,IntelliTrace會主動展示程式運行過程中的關鍵事件,諸如代碼異常、檔案訪問、時時調試等等。