【问题标题】:Which signal numbers does GDB use?GDB 使用哪些信号编号?
【发布时间】:2015-11-10 00:00:51
【问题描述】:

我一直在尝试组合一种“远程 gdb 代理”,但我似乎没有为停止数据包找到正确的信号编号。我在哪里/如何找到 gdb 实际使用的信号编号?至少 Debian Jessie repo 中的 gdb-multiarch 表现得很奇怪。

信号 31 显示为 SIG37 - 实时事件 37(我期望 SIGUSR2) 如果我发送信号 10,dgb 会显示“无法向此远程系统发送信号。未发送 SIGURG。”并发送一个“c”数据包(我希望是 SIGBUS)。

启用远程和串行调试后,我可以看到信号 31 和 10 实际上是由 gdb 接收的。

[编辑] 通过尝试,我发现了前 30 个信号。这是第一个: (星号表示无法继续调试) 2 信号 4 信号 5 SIGTRAP 6 SIGABRT * 7 信号 8 SIGFPE 9 信号杀手 10 西格* 11 信号停止 12 SIGTSTP 13 信号控制 * 14 SIGCHLD * 15 签名 * 16 西头 17 西吉奥 * 18 SIGXCPU *

[编辑2]

[r $][T][1][0][#][b][5]Packet received: T10
  ...
  Can't send signals to this remote system.  SIGURG not sent.
  Sending packet: $c#63...[\x00][\x00][\x00][\x00][\x00][
  r +]Ack

【问题讨论】:

    标签: gdb signals


    【解决方案1】:

    gdb 远程协议使用自己的信号编号。这些必须由您的远程代理转换为正确的系统值。详情见the documentation(第一段);我认为信号编号仅在 gdb 头文件中可用。

    【讨论】:

    • 知道在哪里可以找到 Debian 的 gdb-multiarch 7.7.1 源吗?或者任何 gdb-multiarch 7.7.1 来源?远程代理如何知道哪个 gdb 客户端版本使用它?我阅读了 Debian 本地 gdb (x86_64) 包含,但那里的信号数有很大不同。
    • 我认为信号数应该随着时间的推移保持不变。是什么让你觉得他们变了? FWIW 你真正想要阅读的文件是 $src/include/gdb/signals.def;这是在包含时使用宏处理的。
    • 我在任何地方都没有找到源代码,而且这个:sourceware.org/git/… 甚至还没有接近。
    • 我相信这就是 gdb 的 gdbserver 实现所使用的。
    • T数据包信号号是两个hex位,所以T10表示“信号16”,即SIGURG。你想要T0A。我不知道SIGPHONE 可能是什么,有时这些东西来自不再存在的古老系统。
    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多