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

标签 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

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

我能想到三件事:

  1. A 转到第 4 行。B 停留在第 2 行,直到按下“继续”按钮。
  2. A 转到第 4 行。B 转到第 3 行
  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/

相关文章:

c++ - 带有指向自身指针的 Arduino 结构泄漏内存

c# - 如何优化读取访问?

c++ - 我有反作弊程序 SSDT Hook 地址,但如何恢复它们?

java - 如何在 Java 线程上使用共享内存?

java - 在java中两个独立的连续任务之间共享单个线程的最佳方法是什么

iOS:LLDB 多行断点命令无法按预期工作

C# - 标记自定义窗体的基类使设计 View 显示 HTML

c++ - QListView 仅在 View 中显示单个项目

c++ - 如何允许 SYNCHRONIZE 对所有进程的访问权限

c++ - 从有符号字符到整数的值初始化,过早提升?