我知道以前有人问过这个问题,但我读过所有的帖子,没有找到答案。从我执行run开始调试我的项目的那一刻起,我就得到了以下内容:Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread 6]。当我做ctrl+c时,gdb告诉我:Program received signal SIGINT, Interrupt. 0x00000000 in ?? ()
通常,它会告诉我哪个文件和哪个函数在not 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使用哪个线程的*。我甚至不知道这是否与问题有关。有人能帮帮我吗?
发布于 2017-12-06 18:53:06
你没有提供足够的信息来帮助你。细节很重要,而你却隐瞒了它们。GDB和gdbserver的版本,如何调用GDB和gdbserver,从GDB (如果有的话)收到哪些警告。
现在,这个错误消息是:
Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread 6]通常意味着gdbserver没有附加进程的一个线程,并且该线程试图执行断点指令(在此之前设置了断点,不是吗?)
出现这种情况的原因之一是当GDB加载“错误”的libthread_db.so (与目标libc.so.6不匹配)时。
让事情变得更疯狂的是,我和一位同事共享同一个会话(调试是用一台远程计算机使用cygwin完成的),这对他们来说很好,但对我来说不行。
我不知道您所说的“同一个会话”是什么意思,但它可能不是“当他键入命令时,它们就工作了;但是当我在同一个GDB中键入相同的命令时,它们就不起作用了”。
您和您的同事之间的一个区别可能是LD_LIBRATY_PATH环境变量设置。另一个可能在~/.gdbinit或./.gdbinit。
我建议运行gdb -nx以摆脱后者,取消LD_LIBRARY_PATH以消除前者。
发布于 2017-12-14 09:44:55
整件事情的问题在于,出于某些原因,似乎没有人注意到它是这样的:我就是这样命名gdb /usr/local/build/gdbx.y/gdb/gdb的,我应该做的是:/usr/local/build/gdbx.y/build/gdb/gdb,这是一个路径问题。
https://stackoverflow.com/questions/47678054
复制相似问题