本文共 1486 字,大约阅读时间需要 4 分钟。
开发环境的概念
1.构建环境--代码编写,程序编译,版本控制2.调试环境--用于定位问题的辅助工具集3.测试环境--用于验证目标程序是否满足用户的显性需求和隐性需求一般的嵌入式开发中的时间分配--代码编写及目标构建(20%) 测试 调试 修复(80%)GNU为GCC编译器提供了配套的辅助工具集
在提供的网站上可以看出,提供的工具以及功能的介绍A.addr2line1.将指定地址转换为对应的文件名和行号2.常用于分析和定位内存访问错误的问题addr2line示例:定位0地址访问
1.开启core dump选项--ulimit -c unlimited2.运行程序,并生成崩溃时的core文件--执行导致程序崩溃的测试用例3.读取core文件,获取IP寄存器的值--dmesg core4.使用addr2line定位行代码--addr2line (地址) -f -e test两个.c代码如下
#includeint* g_pointer;void func(){ *g_pointer = (int)"D.T.Software"; return;}
#includeint g_global = 0;int g_test = 1;extern int* g_pointer;extern void func();int main(int argc, char *argv[]){ printf("&g_global = %p\n", &g_global); printf("&g_test = %p\n", &g_test); printf("&g_pointer = %p\n", &g_pointer); printf("g_pointer = %p\n", g_pointer); printf("&func = %p\n", &func); printf("&main = %p\n", &main); func(); return 0;}
由func.c的(*g_pointer全局变量 没有进行初始化)可以看出该指针指向的是空,所以在运行会出现错误----(-g是打印调试信息)
该示例完整的展示了addr2line的功能B.strip
1.剔除程序文件中的调试信息,减少目标程序的大小2.一般在程序发布前都需要将调试信息剔除3.过多的调试信息可能影响程序的执行效率由上图可以看出 调试后的test.out的文件大小与运行了strip之后的文件大小的对比注意事项:1.几乎所有的调试辅助工具都依赖与目标文件中的调试信息2.调试信息的运用都能够快速定位问题3.使用gcc编译程序时使用-g选项生成调试信息4.发布程序时再考虑是否使用strip剔除调试信息C.ar
1.打包文件--ar crs libname.a x.o y.o2.解压目标文件--ar x libname.a展示了 ar命令 打包与解压的操作D.nm
1.列出目标文件在的标识符(变量名,函数名)2.输出结果由三部分组成(地址,段,标识符)E.size 与strings1.size--获取目标文件在的所有大小--size test.out2.strings--获取目标文件中的所有字符串常量--strings test.out转载于:https://blog.51cto.com/13475106/2363393