GDB远程调试:无法停止线程

时间:2014-07-10 06:31:14

标签: linux debugging gdb remote-debugging gdbserver

我在目标上有一个 gdbserver ,我就像gdbserver :2345 /bin/ls一样启动。接下来,我从主机连接一个gdb,并尝试发出下一个命令:

(gdb) target remote 192.168.1.2:2345
Remote debugging using 192.168.1.2:2345
warning: Architecture rejected target-supplied description
[New Thread 686]
(gdb) Remote 'g' packet reply is too long: 00000000c10ed6be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00dd6be0000000030fe0d40100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(gdb) i thr
  Id   Target Id         Frame 
* 1    Thread 686        (running)
(gdb) interrupt
(gdb) interrupt 1
(gdb) interrupt 2
(gdb) i thr
  Id   Target Id         Frame 
* 1    Thread 686        (running)
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
我认为可能是gdb崩溃的原因是奇怪的消息,试图谷歌。发现了两个假设。 Here's a man 假设 gdb (尽管IMHO在目标上运行 gdbserver 应该发送一个抽象的与arch无关的命令)需要它的体系结构要设置的调试。但它不起作用:

(gdb) set architecture armv7-a
Undefined item: "armv7-a".
(gdb) set architecture armv7
Undefined item: "armv7".
(gdb) set architecture armv5te
Undefined item: "armv5te".

我没有找到任何可以列出支持的体系结构的命令。 second assumption gdbserver 本身需要配置一个神话选项--with-expat。但是...... configure: WARNING: unrecognized options: --with-expat

我没有更多的想法。所以,有人知道:如何中断目标上的线程?(顺便说一句,断点可以设置得很好,但它根本没有帮助,因为似乎gdb正在处理正在运行的线程。如果线程会正在运行,被调试的ls刚刚立即消失。)

2 个答案:

答案 0 :(得分:2)

虽然可以构建“multiarch”gdb,但默认的Ubuntu GDB(称为gdb)是为了支持单一架构 - 主机PC而构建的。您无法使用它调试其他CPU,尽管它确实连接到任何gdbserver。

您需要可以调试目标(ARM)的gdb,并且与目标上使用的ABI兼容。

你应该用你的工具链得到它,但如果没有,那么从源代码构建并不困难。有关简要说明,请参阅sourceware.org/gdb/wiki/BuildingCrossGDBandGDBserver

答案 1 :(得分:2)

为了检查您的GDB当前支持的架构(您可以在set architecture命令中使用的架构),只需键入:

(gdb) set architecture

没有任何论据......就这么简单。 否则,您可能需要交叉GDB,如@ drbank0所述。