繁体   English   中英

程序收到信号 SIGTRAP,跟踪/断点陷阱。 [切换到主题6]

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

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

通常它会告诉我哪个文件和哪个函数在不是0x00000000 in ?? ()处中断0x00000000 in ?? () 0x00000000 in ?? () GDB 不再命中断点,更疯狂的是,我和一个同事正在共享同一个会话(调试是使用 cygwin 和远程机器完成的),这对他们来说很好,但对我来说却没有。 当我尝试使用info threads获取有关线程的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不匹配的那个)。

更疯狂的是,我和一位同事正在共享同一个会话(调试是使用 cygwin 和远程机器完成的),这对他们来说很好,但对我来说却没有。

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

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

我建议运行gdb -nx来摆脱后者,并取消设置LD_LIBRARY_PATH以摆脱前者。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM