1

基于在 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

单击“跳过”按钮会发生什么?

我能想到三件事:

  1. A 转到第 4 行。B 停留在第 2 行,直到按下“继续”按钮。
  2. A 去 4 号线 B 去 3 号线
  3. A 去 4 号线。虽然 A 不会停在 4 号线,但 B 会无限期地继续前进。一旦A再次停止,B就停止。这意味着 B 可以在第 4 行,也可以在 A 从第 3 行到第 4 行时退出。

如果让我猜,我会选择选项 3。

在该行之后,有一种方法可以像我的选项 2 一样逐行调试线程?我问的是是否有任何 C++ 调试器能够停止所有线程并逐行逐行逐个执行

4

1 回答 1

0

Windbg 的 step 命令p允许您指定在所有其他线程保持冻结时继续执行哪些线程。请参阅http://msdn.microsoft.com/en-us/library/windows/hardware/ff553496(v=vs.85).aspx

具体看[~ Thread]命令开头的可选项。

于 2013-04-26T13:18:36.760 回答