在Ubuntu上调试ARMv7的core文件
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: 用于在Ubuntu上编译适用于ARMv7架构的程序,是一种交叉编译器;
- gdb-multiarch: 支持多种架构的GDB版本,可以用来调试ARMv7程序;
 安装 gcc-arm-linux-gnueabihf之后,相关的文件在如下目录(记为D)中:- /usr/local/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/
 将ARMv7下的可执行文件和core dump文件拷贝到D文件夹下 若D文件夹下没有 arm-linux-gnueabihf-gdb文件,可以使用gdb-multiarch替代.为方便gdb调试时使用 set solib-search-path设置库文件,可以将可执行文件所需要引用的库文件也一同放在D目录下,不过建议还是统一放到一个固定的地方,方便调试,如:创建如下~/crash/项目名/bug编号/目录,之后在该目录下存放以下文件:- 可执行文件: 最好是debug版本,执行该文件产生了如下的core dump文件;
- core: 即core dump文件
- library: 该可执行文件依赖的库文件
 而将对应的ARMv7的系统库文件可以放在 /opt/下,如:- /opt/arm_lib: 该文件夹下存放ARMv7系统- /lib下的系统库文件和C运行库;
- /opt/arm_usr_lib: 该文件夹下存放ARMv7系统- /usr/lib下的用户级运行库;
 以上这3个文件夹,当使用 gdb-multiarch调试时,需要使用set solib-search-path来设置,以上3个文件夹,使用:隔开;
- 
获取ARMv7上的系统库文件 分别为ARM系统下的 /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/arm_lib: 设置root目录,并回车之后,就会开始加载有符号文件的动态库;之后,就可以运行bt查看崩溃堆栈信息;
- bt: 查看堆栈信息
- i sharedlibrary: 查看哪些动态库有符号文件;
- f num: 切换堆栈层;
- l: 查看相关代码;
1.3 注意事项
- 产生core文件的可执行文件,最好使用debug版本,这样可以更好的进行排查问题;
- 最好将可执行文件,core文件,当前可执行文件所依赖的本地库文件放到同一个文件夹下,方便gdb-mutliarch进行set solib-search-path设置;
- 若执行以上的2.操作之后,没有分析堆栈信息,可以使用set sysroot /opt/arm_lib来强制分析;
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号