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

Posted

技术标签:

【中文标题】BusyBox 上没有调试符号交叉编译 ARM【英文标题】:No Debug Symbols cross compile ARM on BusyBox 【发布时间】:2014-01-13 13:25:11 【问题描述】:

我正在尝试调试在 ARM926EJ-S rev 5 (v5l) 上运行的 C 程序。该软件与std.交叉编译(并静态链接)。 arm-linux-gnueabi 编译器(通过突触安装)。我运行 Ubuntu 13.04 64 位。设备上有一个 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,其输出几乎相同...

提前感谢您的回复。

【问题讨论】:

尝试谷歌solib-absolute-prefix,并在远程主机上使用file target.elf,所以它有符号表。默认情况下,GDB 不会从远程传输符号,它希望您在主机调试器的文件系统上拥有符号。.. 【参考方案1】:

另一种调试方法是在板内使用 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 命令来引用你的进程堆栈。

【讨论】:

以上是关于BusyBox 上没有调试符号交叉编译 ARM的主要内容,如果未能解决你的问题,请参考以下文章

交叉编译VIM并移植到ARM嵌入式Linux系统

QEMU启动ARM32 Linux内核

使用busybox制作rootfs

能否在windows上搭建arm-linux交叉编译环境?

嵌入式linux vi 版本,交叉编译Vim并移植到ARM嵌入式Linux系统

linux arm嵌入式平台busybox工具移植与使用