程序收到信号SIGTRAP,Trace/breakpoint陷阱。 [切换到线程 6]

Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread 6]

我知道以前有人问过这个问题,但我已经阅读了所有的帖子,但没有找到答案。 从我执行 run 开始调试我的项目的那一刻起,我得到了这个:Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread 6]。当我执行 ctrl+c 时,gdb 告诉我:Program received signal SIGINT, Interrupt. 0x00000000 in ?? ()

通常它会告诉我哪个文件和哪个函数被中断了 0x00000000 in ?? () GDB 不再遇到断点,更疯狂的是我和一位同事正在共享同一个会话(调试是通过远程计算机使用 cygwin 完成的)并且它对他们来说工作正常但对我来说不是。 当我尝试使用 info threads 获取有关线程的信息时,我得到的是:

[New Thread 20]
 [New Thread 21]
 [New Thread 22]
  Id   Target Id         Frame
  4    Thread 22 (ssp=0xa9004d5c) 0x00000000 in ?? ()
  3    Thread 21 (ssp=0xa9002e64) 0x00000010 in ?? ()
  2    Thread 20 (ssp=0xa9000ef4) 0x00000000 in ?? ()

The current thread <Thread ID 1> has terminated.  See `help thread'

没有线程 6,也没有 * 表明 gdb 使用的是哪个线程。我什至不知道这是否与问题有关。 谁能帮帮我?

您没有提供几乎足够的信息来帮助您。详细信息 很重要 ,而您却隐瞒了它们。 GDB 和 gdbserver 的版本很重要,调用 GDB 和 gdbserver 的方式很重要,从 GDB 收到的警告(如果有的话)很重要。

现在,这个错误信息:

Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread 6]

通常意味着 gdbserver 没有附加您进程的线程之一,并且该线程已尝试执行断点指令(在发生这种情况之前您确实设置了断点,不是吗?)。

发生这种情况的原因之一是您的 GDB 加载“错误”libthread_db.so(与目标不匹配 libc.so.6)。

what makes matter crazier is the fact that a colleague and I, are sharing the same session (the debug is done using cygwin with a remote machine) and it works fine for them but not for me.

我不确定您所说的“同一会话”是什么意思,但这可能不是“当他键入命令时,它们起作用;但是当我将相同的命令键入同一个 GDB 时,它们却不起作用”。

您和您的同事之间的一个区别可能是 LD_LIBRATY_PATH 环境变量设置。另一个可能在 ~/.gdbinit./.gdbinit.

我建议 运行 gdb -nx 去掉后者,unsetting LD_LIBRARY_PATH 去掉前者。

整个事情的问题是,出于某种原因似乎没有人注意到它: 这就是我如何称呼 gdb /usr/local/build/gdbx.y/gdb/gdb 我应该做的是:/usr/local/build/gdbx.y/build/gdb/gdb 是路径问题。