技巧和注意事项

在大多数时候,使用一个调试器是直观的。只要调试器依赖的东西是正确和好的状态,那么它就可以完美地工作。但是总有些时候,一点事情就会破坏你一整天。当调试器不能按照你需要合作的时候,那会是非常沮丧的。更严重的破坏是,它可能会给出“错误”的信息导致一个假的结论。在你花费了很多时间去追寻一个错误的理由,你发现最基本的假设是不对的。但是,很多时候,不应该去怪罪调试器。通常是我们自己的错误理解或者是自大导致这些悲剧。调试器会抱怨任何它不喜欢的事情。比如,跟二进制相比,一个源码文件具有靠后的时间戳可能意味着一个源代码被改变了;一个不匹配的库文件相对core dump文件里面显示的库文件具有不一样的check sum。有时候一个程序不在你设置的断点停止;或者你不能抓住一个变量被意外改变的时刻;或者调用栈很明显已经是垃圾等等。另外一方面,调试器有很多工程师不知道的强大的特性。在大多数时候,我们仅仅使用了所有功能的一小部分,用来处理常见的调试需求。但是,如果我们花费一点时间来学习调试器高级的特性是值得。它将帮助我们更有效率地调试和解决那些不是每天都能遇到的困难问题。在接下来的章节,我将强调一些在过去帮助过我的技巧。