一次WinDBG调试的心得
前天和TL一起调试了一个程序。
问题是这样的,有个程序启动了两个线程,分别绘制不同的图像,这两个绘制操作是互斥的,通过一个bool型的类成员变量控制,但是测试发现屏幕上两种图像几秒钟内交替出现,这种现象两年来现在是第二次出现,因为是测试环境,所以用WinDBG加载了pdb开始调试。
TL初步调试觉得两个线程里通过线程参数传过去对象指针似乎不一致了,于是两个线程里检测的那个bool型的成员变量值不同。于是花了不少时间去纠结怎样保证多线程环境里获取正确的共享数据。
后来才意识到,WinDBG即使加载了pdb来调试release building程序,也因为代码优化的关系,不能太依赖源代码调试了。在最后通过反汇编跟踪发现,两个线程里跑的代码获取的对象指针确实是同一个,而且是正确的。