1 在Ubuntu上调试ARMv7的core文件
1.1 预备
-
uname -a
: 获得目前嵌入式系统Linux (none) 3.8.11-xilinx #40 SMP PREEMPT Thu Jan 12 17:02:11 CST 2023 armv7l GNU/Linux
-
安装armv7的交叉编译工具链:
sudo apt-get udpate sudo apt-get install gcc-arm-linux-gnueabihf gdb-multiarch
gcc-arm-linux-gnueabihf
: 用于编译ARMv7架构程序的交叉编译器;gdb-multiarch
: 支持多种架构的GDB版本,可以用来调试ARMv7程序;
安装
gcc-arm-linux-gnueabihf
之后,相关的文件在如下目录中:/usr/local/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/
将ARMv7下的可执行文件和core dump文件拷贝到如上文件夹下
若如上文件夹下没有
arm-linux-gnueabihf-gdb
文件,可以使用gdb-multiarch
替代.为方便gdb调试时使用
set solib-search-path
设置库文件,建议将可执行文件所需要引用的库文件也一同放在如上目录下而将对应的ARMv7的系统库文件可以放在
/opt/armv7/
下 -
获取ARMv7上的系统库文件
分别有
/lib
和/usr/lib
/lib
: 包含基本系统程序使用的共享库文件,例如: C库, 内核模块等/usr/lib
: 包含用户级应用程序使用的库文件
并将该库存放到当前ubuntu下的
/opt/下
,如/opt/arm_lib
和/opt/arm_usr_lib
-
将Arm下运行的可执行文件所依赖的库,存放到指定位置,如
/opt/arcs/librarys/
当
gdb-multiarch
调试时,需要使用set solib-search-path
来设置所引用库的全部文件;
1.2 直接在非ARM的主机上调试ARM下生成的core文件
sudo gdb-mulitarch ./ARCS ./core
set solib-search-path /opt/arm_lib/:/opt/arm_usr_libs/:Libraries/:Libraries/log4cpp/:Libraries/sqlite/
: 设置so的库文件搜索路径, 注意这里的Libraries/:Libraries/log4cpp/:Libraries/sqlite/
这三个文件夹是当前可执行文件所需要使用的库文件,且都存放在/usr/local/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/
下(gdb) set sysroot /opt/armv7_sys_libs
: 设置root目录,之后就会开始加载bt
: 查看堆栈信息i sharedlibrary
: 查看哪些动态库有符号文件;f num
: 切换堆栈层;l
: 查看相关代码;