Visual Studio 八个调试建议:像老大哥一样调试

简介:

Visual Studio内置有如此之多有用的调试特性,但并非众所周知。本文列举一些我的最爱,包括最近我在?VS2013?中发现的调试特性。

1.在Lambda表达式中的断点

如果你点击左边栏设置断点,你可能很容易被误导认为断点发生在行级别上。实际上,你可以在行内部插入断点,如在你的LINQ的Lamdba表达式中。仅需右击代码部分并且从菜单选择Breakpoint > Insert breakpoint。

2.便捷的输出窗口

输出窗口对调试很有用,同样断点也是弹出式或中断程序的,但它确实很嘈杂。仅需右击输出窗口(要确保输出被设为调试),关闭Module Load,Module Unload,Process Exit 和Thread Exit 以只输出你关心的内容。现在用Debug.WriteLine给出你真正关心的内容吧。
screenshot

你也可以在输出窗口使用Ctrl-S保存设置。

3.在客户端和服务器端附加调试(VS2012)

服务器端和客户端工程在一个solution中是有用的,你仅需要一份Visual Studio运行时拷贝而且也不会在alt-tab键的前进后退中迷失,特别是当它们使用共同的代码如数据结构工程。

有一个缺点,start-up工程是唯一获得附加调试的工程。如果你遇到异常,它会显示在你的客户端,而不是服务端。

现在这个问题很容易解决了。右击solution,选择properties > Multiple startup projects,然后选择Start动作为你需要附加调试的工程。
screenshot

4.创建可重建工程模板

如果你负责SDK或者API,创建一个你独用的简单的应用程序。然后使用File > Export template保存它。

现在你随时可以从你的模板创建一个新的工程,仅需要一些点击。更好的做法是使得用户和测试者能够使用它们,以便他们给你最小的重建。

5.使用DebuggerDisplay属性

调试器默认会使用ToString()来监视并在窗口正常输出类名。即使你重写ToString,对其他调试者也不见得一目了然。

在你的类中通过一句简单的表达式,而不是改变属性值来使用DebuggerDisplay。例如:

[DebuggerDisplay("Order {ID,nq}")
class Order {
    public string ID { get { return id; } }
}

“nq”阻止了双引号发散。你也可以在这里使用方法,但是别做任何可能带来微小副作用的事,否则你观察的对象可能改变其行为,并导致奇怪的事发生。

6.管理断点

你创建了一些带劲的断点,现在你要关闭其中的一个,因为它被点击了太多次,但你马上又要再次用到它。如果你删除了这个断点,你就不得不回来再找到断点位置。

打开常被忽视的Breakpoints窗口(Ctrl-Alt-B)。这个窗口显示了你设置的所有的断点但关键的是允许你使它们无效仅仅通过去除check标记。再次check上以重新使它有效。
screenshot

这个窗口同样提供了快速调试的功能:

条件 断点什么时候发生

发生次数 观察多长时间发生一次并基于该次数中断

标签 断点在分支中允许有效和无效

何时发生 在输出窗口显示一条消息以代替真实的中断

7.断开或输出调用者信息(.NET 4.5/Windows 8 Store)

没有为调用程序当前方法准备的全局变量,并且得到当前栈内容是一个非常慢的操作。

一个快速简单的手段是,为方法增加一个额外的可选字符型参数了,用CallerMemberName属性。例如,

void MyFunction(string someValue, [CallerMemberName] string caller = null) {
    ...
}

因为这是可选的值,你不必修改任何调用程序,但现在你能:

①基于调用程序变量,在某些程序中设置断点条件

②向日志文件或者输出窗口输出调用程序内容

你也可以使用CallerLineNumber 和CallerFilePath。同样记住构造函数,终结器和运算符重载将会显示它们的相关方法名(.ctor,op_Equals等等)。

8.监视方法返回值(VS2013, .NET 4.5/Windows 8.1 Store)

有时你想看看方法返回值但对你来说并不容易,因为它是另一个方法的输入参数,所以你并没有存储该值。

这个功能被加到VS2013中,但是它却非常容易错过,你不得不在正确的时间和正确的地方使用它。正确的地方是 Autos窗口,正确的时间是刚好回到方法被调用的地方这一步。当在你调用方法之前或者在方法体中时你看不到这个。它是一个单一步骤,像这样:
screenshot

箭头标明它是返回值,并且让你知道和它相关的方法名。

写在最后

我也不得不强调,一旦软件离开了你的机器,记录日志对问题解决是多么有效。但这是一个比这个更大的议题。

我是不是遗漏了一些更好的调试建议?在下面的回复中随时让我知道吧。

附:Michael Parshin也有一些调试的很棒的建议。

原文链接: damieng 翻译: 伯乐在线 - EluQ

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
5月前
|
安全 NoSQL 程序员
VS studio实用的调试技巧
VS studio实用的调试技巧
101 1
|
9月前
|
存储 安全 NoSQL
Visual Studio 2022 你必须知道的实用调试技巧
大家好,前面我们讲了Visual Studio 2022的安装和使用以及scanf报错的解决方法 今天分享一些实用的 VS 技巧,而这些技巧很多人都不知道。当你以后在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS “骚”操作,他们会好奇地问:你是怎么做到的?有时候你知道一些别人不知道的小技巧便可以让你显得更专业。 PS:本文所有示例演示均基于 Visual Studio 2022 版本。
191 0
|
9月前
|
NoSQL 编译器 程序员
Visual Studio2022编译器实用调试技巧
Visual Studio2022编译器实用调试技巧
|
12月前
|
安全 程序员 编译器
visual studio 2022调试技巧介绍(2)
1.什么是bug? bug是计算机领域专业术语,bug原意是“臭虫”,现在用来指代计算机上存在的漏洞,原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害。 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2.调试是什么,如何调试? 2.1 调试的概念 调试简单来说就是调试是保证所提供的设备能够正常运行的必须程序。 通过一些工具对代码进行检测,修复bug。
110 0
visual studio 2022调试技巧介绍(2)
|
12月前
|
安全 程序员 编译器
visual studio 2022调试技巧介绍(1)
1.什么是bug? bug是计算机领域专业术语,bug原意是“臭虫”,现在用来指代计算机上存在的漏洞,原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害。 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2.调试是什么,如何调试? 2.1 调试的概念 调试简单来说就是调试是保证所提供的设备能够正常运行的必须程序。 通过一些工具对代码进行检测,修复bug。
254 0
|
算法 程序员 编译器
你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧(上)
前言🙌 1. 什么是bug?🙌 2. 调试是什么?有多重要?🙌 2.1 调试是什么? 2.2 调试的基本步骤 2.3 Debug和Release的介绍。 3. Windows环境调试介绍🙌 3.1 调试环境的准备 3.2 学会快捷键 3.3 调试的时候查看程序当前信息 3.3.1 查看临时变量的值 3.3.2 查看内存信息 3.3.3 查看调用堆栈 3.3.4 查看汇编信息 3.3.5 查看寄存器信息
406 0
|
编译器 程序员 C语言
你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧(下)
4.多多动手,尝试调试,才能有进步。🙌 5. 一道经典面试题目,这里用调试进行演示分析:🙌 6. 如何写出好(易于调试)的代码。🙌 6.1 优秀的代码: 6.2 典型栗子示范: 6.3 const的作用 7. 编程常见的错误🙌 7.1 编译型错误 7.2 链接型错误 7.3 运行时错误 总结撒花💞
195 0
|
C++
Visual studio调试的快捷键
F9:光标到某一行,按F9可以给该行设置断点,或者取消断点; F5:执行程序到第一个断点停下;
186 0
Visual studio调试的快捷键