我是靠谱客的博主 暴躁项链,最近开发中收集的这篇文章主要介绍调试工具集之交叉编译工具链,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 //意思是dev_probe函数有0x50这么大,Oops发生在这个函数的0x8偏移处

//打开kernel根目录下的System.map文件,查找函数符号dev_probe对应的起始地址为8050e7b4,故推算出发生Oops的地方为8050e7bc

//定位 
//通过arm-linux-gnu-addr2line --help可以查看该命令的用法 
sijifan$ arm-linux-gnu-addr2line -e output/build/vmlinux 8050e7bc
output/build/linux-20160205B/drivers/modules/dev_linux.c:900 可以知道是dev_linux.c的900行

        注:System.map是内核符号表文件,位于源码根目录,记录符号(函数名,全局变量…)在内核中的运行地址。

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目标文件

后续补充·······

最后

以上就是暴躁项链为你收集整理的调试工具集之交叉编译工具链的全部内容,希望文章能够帮你解决调试工具集之交叉编译工具链所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部