我多年来一直在使用VS的调试器,但偶尔会发现一个以前从未注意到的功能,并想:“该死!我怎么会错过它呢?它太有用了!”
[免责声明:这些技巧适用于C#项目的VS 2005版本,在旧版本的VS或其他语言中不保证可用]
跟踪对象实例
正在使用给定类的多个实例?如何区分它们? 在垃圾回收之前的编程时代,很容易跟踪引用-只需查看内存地址。在.NET中,你不能这样做-对象可能会移动。 幸运的是,监视视图可以让你右键单击监视并选择“创建对象ID”。
这将在实例的值后附加{1#}、{2#}等,有效地为实例赋予了唯一的标签。
标签将在该对象的生命周期内保留。
监视变量的有意义的值
默认情况下,监视变量的值是其类型。如果要查看其字段,必须展开它,如果字段很多或者它们执行一些复杂操作,这可能需要很长时间(甚至超时!)。
然而,一些预定义的类型显示了更有意义的信息:
- 字符串显示它们的实际内容
- 列表和字典会显示它们的元素计数等。
如果我的自定义类型也能这样该多好啊?
嗯...
...通过.NET反编译器进行一些质量时间,就可以轻松完成这个任务,只需要在我的自定义类型上使用DebuggerDisplay
属性即可:
[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
public string Name { get { ... } }
...
}
重新运行,它可以正常工作。
关于这个主题,这里有更多的信息:MSDN
在所有异常处中断
...即使是在代码中被处理过的异常! 我知道,我是个萌新,竟然没有从出生以来就知道这个,但是无论如何,这里还是有帮助到别人的可能性:
您可以强制调试过程在每次抛出异常时都进入调试模式。 您是否曾经进行了几个小时的错误查找,最终发现了像这样的代码段?
try {
runStrangeContraption();
} catch(Exception ex) {
/* TODO: Will handle this error later */
}
在这些情况下捕获所有异常真的很方便。
可以通过 调试 > 异常... (Ctrl-Alt-E) 启用此功能。选中每种需要的异常类型的 '抛出' 列中的框。
那些对我来说是一些令人头痛的时刻。
你想分享你的吗?