3
|
Paul Wicks asgeo1 · 技术社区 · 15 年前 |
![]() |
1
2
在所有停止模式(当前发布版本支持的唯一模式)中,GDB将在任何线程停止时(由于断点或信号)立即停止所有线程。
当您继续停止的线程时,所有其他线程也将继续,除非您这样做。
也许您希望能够在不恢复所有其他线程的情况下单步停止线程?在那种情况下,
注意:如果另一个线程持有一个锁,则打开调度程序锁定,并且当前线程也需要相同的锁,则程序将无限期等待。如果其中一个线程位于malloc/realloc内部,并且当前语句试图分配一些内存,则通常会出现这种情况。
也别忘了
|
![]() |
2
4
当程序在gdb下因任何原因停止时,例如达到断点,所有执行线程都将停止,而不仅仅是当前线程。 问题是,当您在一个线程中单步执行代码时,其他线程可能会执行多个步骤。另一个问题是,其他线程停止在语句中间,而不是在语句边界处,因此看起来可能有点混乱。 除此之外,如果系统调用中的其他线程被阻塞,一旦“您的”线程停止,系统调用将提前返回,因此您将得到有趣的结果,除非您以检查此情况并在发出信号后重新启动阻塞调用的特定方式进行编码。 您可以在中找到更多信息 Debugging with GDB - Section 5.4 Stopping and Starting Multi-thread Programs 可以在gdb网站的文档部分找到。 编辑:看起来你想要的是不停模式。看起来像 this version 有第5.4.2节讨论不停止模式,版本 gnu site 没有。 |
![]() |
3
1
这是gdb的默认值。使能 Non-Stop Mode 使用 设置不停机 . |
![]() |
rammanoj · 使用目标远程本地主机:26000 6 年前 |
![]() |
Ray · 在D中引发异常时,如何使调试器中断? 6 年前 |
![]() |
Zhou · 如何使用当前IP和BP寄存器计算出完整的调用堆栈? 6 年前 |
![]() |
Kajsa · gdb日志记录不工作 6 年前 |