昨晚调试一个程序中的问题花了好几个小时,最终发现竟然是一个简单的手误,将 != 写成了 =,结果导致 if 判断总是为 TRUE,更为恶心的是类的一个属性总是被修改,这样的低级错误在.Net中估计编译时就有警告了,看来VC6真的老了,幸好有内存断点可以调试,否则恐怕一晚上也搞不定到底是哪里出了问题。
我现在终于体会到了将属性封装成 get{} set{} 这样的做法的好处了,大概有以下几点:
1. 对类来说这样做是更好的封装,以减少由于外部程序直接修改属性值而产生难以跟踪的问题
2. 在 get{} set{} 可以做更多的细节处理,例如对属性类进行实例化
3. 调试也更方便,至少不需要内存断点了
我百度了一下,虽然有一些关于调试方面的文章,但涉及到内存断点具体做法的很少,所以贴出来供大家参考。
就拿我昨晚调试的程序做例子:
1. 在适当的地方设置断点,找到欲监视对象的地址,拖到监视窗口
2. 这里我要监视的是 Top 属性的改变,右键点击 Top,选 Properties
3.VC 自动给出了它的 Expression,这就是我们要设的断点的表达式,不过不能直接Ctrl+C复制,可以用 spy++ 把它拷出来:
4. 按 Ctrl+B,切换到 Data,输入上面复制出来的 Expression,确定。
5. 她来了!