標籤:
from:http://www.cnblogs.com/lyosaki88/p/3481338.html
一般寫完代碼時,我們通常會啟動調試運行一下看看是否正確,啟動啟動並執行方式無非是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等相關如無需求都可以關閉。
Visual Studio調試技巧 -- Attach to Process #Reprinted#