调试工具集之交叉编译工具链
Posted 四季帆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调试工具集之交叉编译工具链相关的知识,希望对你有一定的参考价值。
1. 交叉编译工具的部分工具的功能列举
arm-linux-androideabi-ar 建立、修改、提取归档文件(.a文件)
arm-linux-androideabi-as 汇编器,将汇编语言程序切换为ELF格式的可重定位目标代码。
arm-linux-androideabi-g++
arm-linux-androideabi-gcc 编译的前端程序,它通过调用其它程序来实现将程序源文件编译成目标文件。
arm-linux-androideabi-ld 链接器,根据链接文件将多个单一的目标程序(ELF格式)链接在一起。
arm-linux-androideabi-objcopy 目标文件格式转换工具,把一种目标文件中的内容复制到另一种类型的目标文件中
arm-linux-androideabi-c++flit 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突
arm-linux-androideabi-gcov 测试代码覆盖率,分析代码性能
arm-linux-androideabi-ranlib 产生归档文件索引,并将其保存到这个归档文件中。
//编译阶段可作为调试的工具
arm-linux-androideabi-nm 列出目标文件中的符号
arm-linux-androideabi-strings 打印目标文件初始化和可加载段中的可打印字符
arm-linux-androideabi-strip 丢弃目标文件中的全部或者特定符号
arm-linux-androideabi-readelf 显示elf格式可执行文件的信息
arm-linux-androideabi-objdump 反汇编器,将可执行程序反汇编为汇编代码
arm-linux-androideabi-addr2line 把程序地址转换为文件名和行号
//运行阶段可作为调试的工具
arm-linux-androideabi-gdb 调试工具,当应用程序发生核心错误(段错误)时,使用该工具分析生成的core文件可得到报错信息。
arm-linux-androideabi-gprof 显示程序调用段的各种数据
arm-linux-androideabi-ldd 显示程序需要使用的动态库和实际使用的动态库
arm-linux-androideabi-strace 跟踪程序当前的系统调用
arm-linux-androideabi-ltrace 跟踪程序当前的库函数
arm-linux-androideabi-time 查看程序执行时间、用户态时间、内核态时间
arm-linux-androideabi-valgrind 检查内存错误
arm-linux-androideabi-mtrace 检查内存错误
2. GCC编译程序的基本过程
1. arm-linux-gcc 将源文件编译成相应的汇编临时文件(后缀为.s);
2. arm-linux-as 将汇编临时文件编译成目标文件(后缀为.o);
3. arm-linux-ld 根据链接文件将目标文件和各种库链接起来,生成可执行文件。
3. 各个工具的使用场景
3.1 arm-linux-androideabi-addr2line
把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。
应用场景:调试内核的时候,内核崩溃了,此时可以根据各种日志和打印中的偏移内存地址,然后根据这个地址定位到具体是哪个文件的哪一行
示例:
//打印信息
epc : 808e0410 dev_probe+0x8/0x50 //异常程序计数器
exception program counter
//定位
//通过arm-linux-gnu-addr2line --help可以查看该命令的用法
sijifan$ arm-linux-gnu-addr2line -e output/build/vmlinux 0x808e0410
output/build/linux-20160205B/drivers/modules/dev_linux.c:900 可以知道是dev_linux.c的900行
3.2 arm-linux-androideabi-ar
建立、修改、提取归档文件(.a文件,即静态库)
arm-linux-ar -rc test.a a.o b.o 将a.o和b.o打包成库文件test.a
arm-linux-ar -t test.a 查看库中目标文件
arm-linux-ar -x test.a 提取库中的目标文件
arm-linux-ar –r test.a c.o 修改test.a库中加入c.o目标文件
arm-linux-ar –d test.a c.o 删除test.a库中c.o目标文件
后续补充·······
以上是关于调试工具集之交叉编译工具链的主要内容,如果未能解决你的问题,请参考以下文章