基于问题"Step over" when debugging multithreaded programs in Visual Studio ,请考虑以下场景:
运行一些代码的线程 A 启动线程 B 并继续运行,直到线程 A 需要线程 B 的结果。为了理智起见,我们假设以下方案:
Thread A
line 1 // <---- Starts Thread B
line 2
line 3 // <---- Breakpoint
line 4
line 5 // <---- Wait for Thread B
Thread B
line 1
line 2 // <------ When the code breaks, stoped here
line 3
line 4
单击“越过”按钮时会发生什么?
我能想到三件事:
- A 转到第 4 行。B 停留在第 2 行,直到按下“继续”按钮。
- A 转到第 4 行。B 转到第 3 行
- A 转到第 4 行。虽然 A 没有在第 4 行停止,但 B 继续无限期地前进。 A 再次停下来,B 也停下来。这意味着当 A 从第 3 行到第 4 行时,B 可以在第 4 行或退出。
如果让我猜,我会选择选项 3。
在那一行之后,有一种方法可以像我的选项 2 一样逐行调试线程吗?我想问的是是否有任何 C++ 调试器能够暂停所有线程并逐行逐行逐个单步执行?
最佳答案
Windbg 的步进命令 p
允许您指定哪些线程将继续执行,而所有其他线程保持卡住状态。参见 http://msdn.microsoft.com/en-us/library/windows/hardware/ff553496(v=vs.85).aspx
具体看命令开头的可选[~Thread]
关于c++ - 调试多线程应用程序时的步骤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113432/