Visual Studio 使用調試技巧


這篇文章來源於http://damieng.com/blog/2014/02/05/8-visual-studio-debugging-tips-debug-like-a-boss,本文在原文翻譯的基礎上增加一些我個人的經驗,希望對讀者有幫助。

 

1. 斷點中內嵌Lambda表達式

VS中插入斷點有多種類型,例如Hit CountConditionLocation或者僅僅是一個斷點,這里先給大家演示一個插入Lambda表達式的例子。

 

在 var a = items 這條語句上插入一個條件斷點,然后輸入一個針對aLambda表達式:來判斷a的集合中是否含有i==30的項,如果存在則中斷程序。在實際調試程序的時候我們需要在特定值時中斷程序或者判斷列表(或IEnumerable中是否含有特定項。這里,Condition中不僅可以輸入Lambda表達式,更可以輸入任何類型或字符串,不過這都限制在a這個對象的范圍內。

題外話說一下,在VS中還可以加入Tracepoint,此斷點的作用是當執行到設置斷點的位置時,輸出用戶預設的輸出字符串,VS還提供了一些環境變量$PID,$PNAME,最后會在VSOutPut輸出窗口展示出來(上圖中的菱形斷點)。有興趣的同學自己操作下。

2. 啟用輸出窗口

 

在VSOutput窗口是一個非常方便的窗口,便於程序調試,您可以用Debug.WriteLineXXXX)直接輸出信息至Output窗口。您還可以定制輸出類型,有些如Process Exit Message在一些時候就不需要輸出,取消掉即可。

3. 將調試器附着在客戶端和服務端

原文作者標示了這個功能是在VS2012下,其實這個功能在08時候就已經有了。(05是否有這個功能還不知道,也許我們不必去糾結05)

這里不想多說了,大家操作一下就知道了:在項目工程上更改項目為多項目輸出即可,同時設置輸出項目。

 

4. 創建一個項目模板

當你負責編寫API或者SKD的時候創建一個簡單的應用程序,使用你的東西在一個小而獨立的環境下。你可以通過FILE---Export Template功能導出當前項目的模板。

網上有很多介紹,類模板或項目模板的文章,這里不詳細解釋。

 

我個人的類模板

 

5. 管理斷點

 

當前有很多斷點,其中一些想暫時取消,而另一些繼續作用,這回就要用到斷點管理界面了(Ctrl+Alt+B),其中可以勾選一些可用的,和取消勾選一些暫時不想用的。

 

6. 中斷或者輸出調用者信息

 

 

在方法中加入可選參數”,這樣在不破壞原有任何方法的基礎上針對特定方法進行擴展,方便調試。

[CallerMemberName]不同方法中顯示的值是不同的,在調試中所能定義的內容並不多。

詳情請參考:http://msdn.microsoft.com/zh-cn/library/hh551816.aspx

 

7. 設置可返回值的方法(VS2013)

在之前的VS調試器運行方法時,除監視方法(Watch對象或方法)時,默認是不保存變量結果的,這樣我們在調試的時候很不方便,當然你可以用即時窗口,重新運行一次方法。現在有了一種更簡便的方式來監視函數輸出值:Autos WindowCtrl+DA,前提條件是,當前在調試運行環境下。

 

Step 1:在方法上設置斷點。

Step 2:F10讓該語句執行完畢

Step 3:查看Autos Window中的返回值。

這里要強調不是res的值能保存,而是內嵌的方法的返回值。

 

 希望以上內容對您有幫助 :)

源碼下載

 

參考

http://damieng.com/blog/2014/02/05/8-visual-studio-debugging-tips-debug-like-a-boss

http://www.hanselman.com/blog/DownloadVisualStudio2013WhileYourFeedbackStillMatters.aspx

http://msdn.microsoft.com/zh-cn/library/hh551816.aspx

http://msdn.microsoft.com/zh-cn/library/system.diagnostics.debuggerdisplayattribute.aspx

http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx

http://wenku.baidu.com/link?url=VSKzBppzQE8vKcrfvBen3J2IM0_qe87FCch_kOV8QirOLa6csHhov02Qw6271-ZN1KE5_iKu2waxxPqz1EgybLXz-S5so02R8WWKBuFV0sG

http://stackoverflow.com/questions/1100506/how-to-make-debuggerdisplay-respect-inherited-classes-or-at-least-work-with-co

 


免責聲明!

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



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