调试多线程应用程序,如何将调试器逐步过程粘合到特定线程?
Debuging multithread app, how to glue the debugger step by step process to a particular thread?
调试多线程应用程序时,是否可以将调试器粘附到特定线程?因为当我一步一步 (F7) 调试时,我经常跳入另一个线程,这对调试来说有点糟糕:(
如果我将你的问题解释为:
"When debugging is it possible to only allow execution of the thread I am debugging"
那么答案是肯定的
- 设置断点。
- 当调试器遇到断点时,转到线程视图。这 当前线程将标有 'running' 图标(它有一个绿色 'play' RAD Studio 最新版本中的箭头。
- 右键单击该线程并选择
Freeze all other threads
。
调试器现在允许您单步执行当前线程,而不允许安排其他线程。
完成后,您可以右键单击任何线程并选择 Thaw all threads
当然这会影响系统的行为,因为其他线程不会 运行。
如果我将你的问题解释为:
"Is it possible to ensure that a breakpoint only fires for a particular thread"
那么答案是肯定的
- 设置断点。
- 右键单击断点并选择“断点属性”。
- Select下拉列表中的一个线程,只有这个线程会在断点处进入调试器。
如果我将你的问题解释为:
"Is it possible to have all threads running, but only single step through a single thread in the debugger (while other threads run)"
那么实际上我认为答案是否定的。您 可以 在每个连续的行上设置一个断点并将断点的属性设置为当前线程,但这对大多数 single-stepping.
来说并不实用请记住,在调试任何已启用的断点(由任何线程命中)时都将进行评估,并会导致调试器中断,除非断点的属性阻止了这种情况。当单步调试器有效地在下一行插入一个断点时,所以任何线程命中该行都会导致调试器中断。
如果您的所有线程都在执行不同的代码,这将不是问题,但如果它们正在执行公共代码(包括库例程和对象方法),那么任何线程执行下一步都会中断。
当您设置了多个断点时,另一件可以帮助您使用 single-stepping multi-threaded 应用程序的方法是在断点 window 中禁用它们(通常是调试器视图的底部)单步执行时,以便在另一个线程中点击其中一个不会导致调试器中断。