我已经用VS的调试器工作了很多年,但偶尔我会遇到一个我以前从未注意到的功能,并想"该死!我怎么会错过它?它有so个有用的功能!"
[免责声明:这些技巧适用于VS 2005中的C#项目,不能保证VS或其他语言的较早版本]
跟踪对象实例
处理给定类的多个实例?你怎么能把他们区分开来?
watches view http://img403.imageshack.us/img403/461/52518188cq3.jpg个
这会在实例的值之后附加一个{1#}、{2#}等,有效地给实例一个唯一的标签.看起来是这样的:
numbered instance http://img383.imageshack.us/img383/7351/11732685bl8.jpg
标签将在该对象的生命周期内保持不变.
关注变量的有意义值
默认情况下,监视变量的值是它的类型.如果你想看到它的字段,你必须展开它,这可能需要很长时间(甚至超时!)如果有很多领域,或者他们做了一些复杂的事情.
但是,一些预定义类型显示了更有意义的信息:
- 字符串显示其实际内容
- 列表和字典显示它们的元素计数等.
meaningful info http://img205.imageshack.us/img205/4808/37220487md1.jpg
对我自己的类型来说这不是很好吗?
隐马尔可夫模型...
...与你共度美好时光.NET Reflector显示了使用自定义类型上的DebuggerDisplay
属性可以轻松实现这一点:
[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
public string Name { get { ... } }
...
}
... 重新运行,然后...
ta da! http://img60.imageshack.us/img60/926/79816018ha1.jpg
这里有更多关于这个主题的信息:MSDN
在所有例外情况下中断
... 甚至是那些用代码处理的!
每次抛出异常时,可以强制已调试的进程进入调试模式.你有没有经历过几个小时的错误搜寻,却发现了这样一段代码?
try {
runStrangeContraption();
} catch(Exception ex) {
/* TODO: Will handle this error later */
}
在这些情况下,捕捉所有异常非常方便.
对我来说,那是几次拍打额头的时刻. 你愿意分享你的吗?