在线程切换时暂停gdb

在线程切换时暂停gdb,gdb,pthreads,qnx,Gdb,Pthreads,Qnx,每次执行的pthread发生变化时,有没有办法让gdb停止 假设我有两个POSIX线程(线程A和线程B)正在运行,我希望gdb在线程A被挂起而线程B继续执行时停止(反之亦然) 我希望gdb在线程A被挂起并且线程B继续执行时停止 你的问题假设一台单核计算机,这在当今极为罕见 如果您有一个多核CPU,那么a和B将同时执行,您的问题毫无意义 即使假设您是在单核CPU上执行,您所要求的功能(我预计)也基本上是无用的:一个典型的多线程程序在到达任何“有趣”的代码之前会在两个线程之间切换数万次。你肯定不想继

每次执行的pthread发生变化时,有没有办法让gdb停止

假设我有两个POSIX线程(线程A和线程B)正在运行,我希望gdb在线程A被挂起而线程B继续执行时停止(反之亦然)

我希望gdb在线程A被挂起并且线程B继续执行时停止

你的问题假设一台单核计算机,这在当今极为罕见

如果您有一个多核CPU,那么a和B将同时执行,您的问题毫无意义

即使假设您是在单核CPU上执行,您所要求的功能(我预计)也基本上是无用的:一个典型的多线程程序在到达任何“有趣”的代码之前会在两个线程之间切换数万次。你肯定不想
继续
10000次


调试多线程代码时,通常需要断言在整个程序执行过程中各种不变量保持不变。设置断点和单步执行很少有助于多线程调试。

我在嵌入式系统的单处理器上使用QNX操作系统。这里我可能错了,但同一进程的不同线程不是在同一个处理器上连续运行吗?即使在多核CPU上也是如此?是的,你错了。多线程的全部目的是使单个应用程序在多核机器中同时使用多个核成为可能。问题是我的程序使整个操作系统崩溃,因此我无法确定在崩溃之前是否传递了所有调试消息。当我一步一步地完成程序时,一切都很顺利。这就是为什么我想这是一个时间问题。所以我需要弄清楚什么时候运行哪个线程来跟踪问题。我注意到gdb在SIG32上停止,SIG32在优先级改变时发送给线程。我希望在恢复gdb可能停止的线程时会有一个相同的信号。