调试多线程应用程序时的步骤行

时间:2013-04-19 21:01:04

标签: c++ multithreading debugging

根据问题"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

单击&#34;跳过&#34;会发生什么?按钮?

我可以想到三件事:

  1. A转到第4行.B停留在第2行,直到&#34;继续&#34;按钮被按下了。
  2. A转到第4行.B转到第3行
  3. A转到第4行。虽然A不会在第4行停止,但B会无限期地继续前进。一旦A再次停止,B就会停止。这意味着当A从第3行到第4行时,B可以在第4行或退出。
  4. 如果我被要求猜测,我会选择我的选项3.

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

1 个答案:

答案 0 :(得分:0)

Windbg的步骤命令p允许您指定哪些线程继续执行而其他线程保持冻结状态。见http://msdn.microsoft.com/en-us/library/windows/hardware/ff553496(v=vs.85).aspx

具体看一下命令开头的可选[~ Thread]