【问题标题】:Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread 6]程序收到信号 SIGTRAP,跟踪/断点陷阱。 [切换到线程 6]
【发布时间】:2018-05-20 13:21:23
【问题描述】:

我知道以前有人问过这个问题,但我已经阅读了所有主题,但没有找到答案。 从我执行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版本,是7.2。

标签: c gdb remote-debugging


【解决方案1】:

您没有提供几乎足够的信息来帮助您。详细信息很重要,你隐瞒了它们。 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版本,是7.2。
  • 如果我不调试也不设置断点怎么办?这让我很困惑。
  • @ed22 如果您不进行调试,那么根据定义,您将无法收到作为此问题主题的 GDB 消息。你应该单独问一个,并提供你正在做什么确切的细节。
  • @EmployedRussian 我已经编译了该应用程序并正在尝试运行它。我收到这个错误。没有调试。
【解决方案2】:

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

【讨论】:

  • 安装本地gdb 后,您通常会在/usr/local/bin/gdb 找到gdb。听起来有点不寻常。
猜你喜欢
  • 2018-08-31
  • 2012-04-06
  • 2022-01-05
  • 2023-03-09
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
相关资源
最近更新 更多