基于在 Visual Studio 中调试多线程程序时的“Step over”问题问题,考虑以下场景:
运行一些代码的线程 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就停止。这意味着 B 可以在第 4 行,也可以在 A 从第 3 行到第 4 行时退出。
如果让我猜,我会选择选项 3。
在该行之后,有一种方法可以像我的选项 2 一样逐行调试线程?我问的是是否有任何 C++ 调试器能够停止所有线程并逐行逐行逐个执行?