类库大魔王
类库大魔王 多年C++、Go项目经验,长期从事跨平台(Windows/macOS/iOS/Android)应用架构设计与开发。

一次WinDBG调试的心得


前天和TL一起调试了一个程序。

问题是这样的,有个程序启动了两个线程,分别绘制不同的图像,这两个绘制操作是互斥的,通过一个bool型的类成员变量控制,但是测试发现屏幕上两种图像几秒钟内交替出现,这种现象两年来现在是第二次出现,因为是测试环境,所以用WinDBG加载了pdb开始调试。

TL初步调试觉得两个线程里通过线程参数传过去对象指针似乎不一致了,于是两个线程里检测的那个bool型的成员变量值不同。于是花了不少时间去纠结怎样保证多线程环境里获取正确的共享数据。

后来才意识到,WinDBG即使加载了pdb来调试release building程序,也因为代码优化的关系,不能太依赖源代码调试了。在最后通过反汇编跟踪发现,两个线程里跑的代码获取的对象指针确实是同一个,而且是正确的。

感觉本文不错,不妨小额鼓励我一下!
如果你有Visa、MasterCard之类的国际银行卡,也可以考虑以下选项:
如果你看不到评论框,说明Disqus被墙了。