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

oschina
 oschina
发布于 2014年02月26日
收藏 122

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

1.在Lambda表达式中的断点

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

2.便捷的输出窗口

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

2171

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

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

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

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

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

2172

 

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上以重新使它有效。

2173

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

  • 条件 断点什么时候发生

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

2174

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

写在最后

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

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

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

原文链接: damieng   翻译: 伯乐在线 - EluQ
译文链接: http://blog.jobbole.com/59618/

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Visual Studio 八个调试建议:像老大哥一样调试
加载中

最新评论(18

wwek
wwek
不用vs多年`
高跟男爵
高跟男爵

引用来自“大案要案命案在身”的评论

引用来自“老牛吃小草”的评论

VS 的调试工具 所有IDE中最好!!!不服来辨!

我不用windows开发。 windows就是垃圾
绝大多数上档次的都不用windows开发
所以VS再牛逼有毛用。

哈哈 等微软迷喷··
高跟男爵
高跟男爵

引用来自“老牛吃小草”的评论

VS 的调试工具 所有IDE中最好!!!不服来辨!

我不用windows开发。 windows就是垃圾
绝大多数上档次的都不用windows开发
所以VS再牛逼有毛用。
刘士洲
刘士洲

引用来自“老牛吃小草”的评论

VS 的调试工具 所有IDE中最好!!!不服来辨!

这无可争议,就像office一样,无人超越
我吃烤地瓜
我吃烤地瓜
VS 的调试工具 所有IDE中最好!!!不服来辨!
wolf2999
wolf2999
标题很风骚啊。。。。
2012默认界面不太喜欢
冬日暖阳85
冬日暖阳85
KAO,我把标题看成“Visual Studio 八个调戏建议:像老大哥一样调戏”。
Glitter
Glitter
VS还是不错的~
简单代码
简单代码
调试还是简单点好
alien_hjy
alien_hjy
感觉cout比调试好用。调试不够直观,效率低,只有在遇到简单地cout无法判断的异常才会考虑调试功能
返回顶部
顶部