Visual Studio 11的時間機器IntelliTrace
Visual Studio 一直以來有個強大的功能IntelliTrace,我們可以稱之為軟件運行中的時間機器,可以方便的幫助開發人員,在開發環境重現系統運行的現場,從而發現和解決問題,十分強大。一直以來就有很多開發人員想把它用到生產環境中,去捕獲實際的系統問題,這次在Visual Studio 11中,終于可以實現了,下面我們就試一下它的強大功能。
在具體操作前,我們先來回顧一下IntelliTrace的運行原理,下面的截圖有個基本的理論基礎,IntelliTrace的運行需要有一個運行中數據的收集計劃(CollectionPlan.xml),它記載了我們重點關心哪些數據,這些信息將來會被收集起來;有了要收集的內容,適當的時候啟動了IntelliTrace,他的系統記錄器就會以一種插針的方式在應用中收集數據;數據收集后,生成一個IntelliTrace的信息文件,這里記錄了所有選擇的調用堆棧信息和程序運行信息;通過這個IntelliTrace的信息文件,只要你有這個應用,就可以在開發環境中重新系統運行的當時情況,通過前進、后退等功能在系統中跟蹤程序問題的細節,并結合調試發現系統運行中的問題。
知道了這些基本原理,我們就可以試一下Visual Studio 11強大的IntelliTrace for Production功能了。
首先下載IntelliTrace Collector for Visual Studio 11,這已經是一個單獨的產品了,下載地址在http://www.microsoft.com/visualstudio/11/zh-cn/downloads#intellitrace-collector。下載安裝后只有9M左右大小,十分的輕便,可以用到生產系統上。
下面就是配置數據收集計劃了,這是通過一個XML文件來實現的,具體配置內容可以參見http://blogs.msdn.com/b/visualstudioalm/archive/2011/09/15/modifying-an-intellitrace-collection-plan-for-the-stand-alone-collector.aspx這里有一個詳盡的介紹。但是更省事的方式是使用Visual Studio中的配置界面(Tools ->Options ->Intellitrace),配置后會存儲到C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\IntelliTrace\11.0.0\en下面的collectionplan.xml。呵呵,我們選擇了關注的事件,直接用它就好了。
安裝IntelliTrace完畢,我們也有了Collectionplan.xml的數據收集計劃了,下面我們可以使用IntelliTrace,但需在PowerShell模式下,所以系統需要安裝PowerShell,這里不贅述,安裝好后用Import-Module c:\IntelliTrace\Microsoft.VisualStudio.IntelliTrace.PowerShell.dll命令,導入IntelliTrace的PowerShell命令,可以看到所有IntelliTrace相關的命令了。
下面就可以根據需要啟動IntelliTrace,進行數據收集了,我用Start-IntelliTraceCollection “FabrikamFiber.Extranet.Web”
C:\IntelliTraceLogsc:\IntelliTrace\collectionplan.xml啟動了IntelliTrace,其中的第一個參數是應用程序池名。其中后,就會在collectionplan.xml的指定目錄中生成數據文件,由于IntelliTrace記錄了很多系統運行的堆棧細節,所以增長會很快,你可要留好了硬盤了啊!
數據收集的差不多了,我們可以通過Stop-IntelliTraceCollection“FabrikamFiber.Extranet.Web” 結束數據收集,記住一切數據收集都是有代價的,我的機器在開啟了IntelliTrace后,增加了200M的內存使用。
我們來看一下收集的結果把,到指定目錄,發現了生成的Itrace數據文件,我們就可以用它來進行調試了,幫助我們重新系統出現問題的現場,具體調試的細節請參見http://msdn.microsoft.com/en-us/library/dd264915(v=vs.110).aspx。
個人使用感受,IntelliTrace for Production真是一個很牛的功能,盡可能少的系統代價前提下,可以幫助收集到大量的系統信息,特別是可以直接在開發環境重現生產環境的問題,并可以調試重入,大大的解決了生產系統問題無法重新導致的系統問題,有給了我們.net開發者一個有效的利器去保障系統的可靠運行。