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

 

posted @ 2014-09-02 22:14  史蒂芬King  阅读(3235)  评论(1编辑  收藏  举报