Windbg调试----多线程控制调试
在调试程序的时候,可能经常会有这样的需求,让一个线程在特定的时候才让其开始执行或者暂停执行。比如复杂的多线程导致死锁的问题,又或者多线程中的Race Condition 导致程序执行异常等。 很多时候,我们可以借助编写调试代码来达到多线程的调试,可是有些情况下调试的执行粒度是指令级别的,那么这个时候我们得借助调试利器Windbg了。本文我们将以 《C/C++编程教训—-函数内静态类对象初始化非线程安全(C++11之前)》 为调试例子 (没看过的同学,可以先看一下这篇博文)。个人觉得这个例子不错,这个调试的执行力度是指令级别的,因为其存在的线程安全问题的代码是编译器生成的,并不是程序员自己的代码。 测试代码 以下这段代码,创建两个线程,这两个线程等待主线程触发的event,然后打印 TestFunction 返回的对象的成员变量 m_iVal 。**正常情况下,两个线程的打印的 m_iVal 都为4。可是在之前博客有提到过, TestFunction() 是非线程安全的,而我们也无法通过增加调试代码来触发这个非线程安全的问题。那么下一章节,我们将通过Windbg来控制线程的执行来触发这个非线程安全的问题。 TestObject TestFunction() { static TestObject obj; return obj; } HANDLE hEvent = NULL ;