开发环境的概念
1.构建环境--代码编写,程序编译,版本控制
2.调试环境--用于定位问题的辅助工具集
3.测试环境--用于验证目标程序是否满足用户的显性需求和隐性需求
一般的嵌入式开发中的时间分配--代码编写及目标构建(20%) 测试 调试 修复(80%)

GNU为GCC编译器提供了配套的辅助工具集
在提供的网站上可以看出,提供的工具以及功能的介绍
软件开发--开发中的辅助工具_第1张图片
A.addr2line
1.将指定地址转换为对应的文件名和行号
2.常用于分析和定位内存访问错误的问题

addr2line示例:定位0地址访问
1.开启core dump选项--ulimit -c unlimited
2.运行程序,并生成崩溃时的core文件--执行导致程序崩溃的测试用例
3.读取core文件,获取IP寄存器的值--dmesg core
4.使用addr2line定位行代码--addr2line (地址) -f -e test

两个.c代码如下

#include 
int* g_pointer;
void func()
{
    *g_pointer = (int)"D.T.Software";
    return;
}
#include 
int 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是打印调试信息)
软件开发--开发中的辅助工具_第2张图片
软件开发--开发中的辅助工具_第3张图片
软件开发--开发中的辅助工具软件开发--开发中的辅助工具
该示例完整的展示了addr2line的功能

B.strip
1.剔除程序文件中的调试信息,减少目标程序的大小
2.一般在程序发布前都需要将调试信息剔除
3.过多的调试信息可能影响程序的执行效率
软件开发--开发中的辅助工具_第4张图片
由上图可以看出 调试后的test.out的文件大小与运行了strip之后的文件大小的对比
注意事项:
1.几乎所有的调试辅助工具都依赖与目标文件中的调试信息
2.调试信息的运用都能够快速定位问题
3.使用gcc编译程序时使用-g选项生成调试信息
4.发布程序时再考虑是否使用strip剔除调试信息

C.ar
1.打包文件--ar crs libname.a x.o y.o
2.解压目标文件--ar x libname.a
软件开发--开发中的辅助工具_第5张图片
展示了 ar命令 打包与解压的操作

D.nm
1.列出目标文件在的标识符(变量名,函数名)
2.输出结果由三部分组成(地址,段,标识符)
软件开发--开发中的辅助工具_第6张图片
软件开发--开发中的辅助工具_第7张图片
E.size 与strings
1.size--获取目标文件在的所有大小--size test.out
2.strings--获取目标文件中的所有字符串常量--strings test.out
软件开发--开发中的辅助工具_第8张图片