没有调试符号在BusyBox上交叉编译ARM

时间:2014-01-13 13:25:11

标签: c gdb arm cross-compiling gdbserver

我正在尝试调试一个在ARM926EJ-S rev 5(v5l)上运行的C程序。该软件与std进行了交叉编译(并且是静态链接的)。 arm-linux-gnueabi编译器(通过synaptic安装)。我运行 Ubuntu 13.04 64bit 。在设备上是 Busybox v1.18.2 。我成功编译了gdbserver(带有 host = arm-linux-gnueabi )和gdb(带有 target = arm-linux-gnueabi )并可以通过嵌入式设备启动我的程序本地运行的gdb ... 我现在的问题是,我没有适当的回溯输出。

gdb消息:

Remote debugging using 192.168.21.127:2345
0x0000a79c in ?? ()
(gdb) run
The "remote" target does not support "run".  Try "help target" or "continue".
(gdb) continue
Continuing.
Cannot access memory at address 0x0
Program received signal SIGINT, Interrupt.
0x00026628 in ?? ()
(gdb) backtrace
#0  0x00026628 in ?? ()
#1  0x00036204 in ?? ()
#2  0x00036204 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)

我尝试使用 -g,-g3 -gdwarf-2,-ggdb,-ggdb3 编译软件,没有任何区别。

有人知道我在这里缺少什么吗?

这可能是BusyBox的问题,还是我的主机系统需要额外的库?

我也尝试了 execinfo.h 中的函数 backtrace_symbols ,输出几乎相同......

提前感谢您的回复。

1 个答案:

答案 0 :(得分:0)

调试的另一种方法是使用gdb内部板,遵循以下步骤。

1)Run gdb process and attach your process to gdb using attach <pid> command
2)Continue your process using c command in gdb

每当您找到任何SIGINT或SIGSEGV时,请使用gdb中的bt命令引用您的进程堆栈。