Visual Studio調試技巧 -- Attach to Process


本文系作者原創,但可隨意轉載。
另:圖中使用的IDE為Visual Studio 2013 RC 英文版。

        
       一般寫完代碼時,我們通常會啟動調試運行一下看看是否正確,啟動運行的方式無非是F5-- Start Debugging 或 Ctrl+F5-- Start Withour Debugging(注:不同版本或系統環境不同時,快捷鍵或有所變化),如下圖1。不用說大家都能感覺到,使用Ctrl+F5調試時程序從啟動到運行通常比使用F5快得多。使用Ctrl+F5時通常是想快速運行一遍,以便檢查程序運行的結果是否符合預期。使用F5時通常是想查看代碼內部的運行情況,以便檢查到底是哪一步出了問題,或者所有參數是否都正確。(當然,運行Release版本的程序將比上述二者更快。那是因為編譯器在將源代碼編譯成IL及機器碼時加入了相應Debug策略的優化代碼,而使用F5調試加入了更多相應的優化代碼,所以你才能進行單步調試以及使用斷點。)
圖1
        假如你的代碼只有一行打印輸出“Hello, World!",當然適用任何調試策略。。。
        現在我們以一個大型的網站項目為例,在寫完一段代碼后,如果想通過啟動運行來檢查它的正確性,那么你不僅需要使用IDE對其進行編譯(鏈接)(即F5或Ctrl+F5),還要將其部署到IIS服務器上(VS已替你自動完成,這時候你的右下角任務欄內會出現相應圖標,如圖2)。相比編譯(鏈接)完成就可以直接運行的程序來說,以目前的處理器還是可以明顯的感覺到二者啟動速度的不同。


圖2 
        一般出現的兩種情況是,若使用Ctrl+F5進行調試,程序一旦運行起來,出現BUG會彈出錯誤頁面顯示系統拋出的異常,但大多數情況下僅僅根據這一個頁面往往無法斷定到底是哪里出了問題,所以又要重新使用F5進行調試。但這種方法有一個優點就是即使程序報錯,IIS不會關閉,假如出現問題的是一段javascript代碼,那么你只需要直接在代碼上修改后保存,再在網頁上刷新即可查看最新的調試結果,無需重新啟動部署IIS。
        若使用F5進行調試,那么每次都必須重新啟動部署IIS,相當耗時,而程序在運行過程中一旦報錯,IDE會自動退出跟蹤並關閉IIS。而程序在出現問題的時候,往往不是一次兩次F5就可以解決問題的,而且每次你重新運行又要重新操作一次需要預先進行的步驟,這耗費的時間真的讓人蛋疼。好處就是你可以看到到底是哪里出了什么問題。還有一種需要使用F5進行調試的情況是,有時系統會拋出這樣一些異常,不知是出於安全原因還是處於某種不為人知的原因,他會告訴你程序出現了錯誤,但具體錯誤請你查看InnerException,而這個InnerException是Exception類的一個Property,你只有通過IDE找到這個Exception並打開它的InnerException才能知道它到底出了什么問題。。。糾結。。。
        使用AttachToProcess意味着將程序的運行和代碼的跟蹤分離。具體過程如下(以一個網站為例),
         首先我使用Ctrl+F5將整個程序(網站)快速啟動運行起來,對其進行操作,直到我希望對代碼進行跟蹤的地方,如圖3。
        
圖3
        圖3中,若我點擊添加,將調用程序的POST方法,對左側選中的節點”煙氣脫硫技術的適用性“添加一個名為”測試指標1“的子節點。 此時,由於我使用的是Ctrl+F5,所以若我直接點擊”添加“按鈕,程序不會產生任何中斷而是直接運行。這里我先將需要跟蹤的代碼打好斷點,如圖4。
圖4 
        我把斷點打在第106行,希望在一進入方法時就對代碼進行跟蹤, 然后選擇"Debug"菜單中的”Attach to process"如上圖1。然后,彈出選擇菜單。如圖5。
 
 圖5
        這里我選擇的是名稱為”iisexpress.exe"的進程,即圖5中顏色加深的那一行。因為Web項目的代碼是部署到IIS上的(具體是編譯后部署dll等到IIS上,還是直接部署源代碼可能存在多種情況,您可以參考 http://technet.microsoft.com/zh-cn/cc437689關於Web項目的編譯和部署或其他資料進行深入研究)。點擊Attach之后,整個IDE界面便進入跟蹤調試模式,如圖6.

圖6
         此時我再點擊網頁上的“添加”按鈕,即可從斷點開始調試,如圖7.

 
圖7.
        如上圖,斷點被命中,方法確實傳入了名稱為我剛才輸入的“測試指標1”的模型。如此,即可開始對代碼進行跟蹤,直到完成本次調試,即可以點擊停止調試。注意:即使在跟蹤的過程中程序出現BUG無法繼續運行下去需要退出,或者手動退出了調試,IIS也不會關閉,對網站的運行不會產生任何影響。你只需要在需要調試的時候對IIS進程使用Attach to process功能即可。 
  具體使用時還有一些技巧,比如說,我Ctrl+F5運行程序,運行到需要跟蹤時,Attach to process,結果發現需要改后台代碼,此時關閉跟蹤,修改后台代碼后進行Rebuild,此時不要關閉IIS和瀏覽器,直接使用Ctrl+F5,就省去了重啟IIS的步驟,也能節省相當的時間,只需要讓程序重新部署,打開網頁后,可以直接從上一個窗口需要跟蹤的那一步直接進行Attach to process開始操作。
        PS:關於調試時的窗口常用的是ImmediateWindow以及Watch窗口,ImmediateWindow用來即時調試(查看變量,調用函數等都可以),而Watch用來觀察生命周期內的變量等。 而VS默認啟動的BreakPoints用處不大,而IntelliTrace則跟底層IL等相關如無需求都可以關閉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM