程序收到信号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
是路径问题。
我知道以前有人问过这个问题,但我已经阅读了所有的帖子,但没有找到答案。
从我执行 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
是路径问题。