6_开发中的辅助工具

2018-03-29  本文已影响23人  编程半岛

关键词:addr2linestriparnmobjdumpsizestrings

1. 什么是开发环境?

2. addr2line

示例代码:
func.c

#include <stdio.h>

int* g_pointer;

void func()
{
  *g_pointer = (int)"D.T.Software";
    return;
}

test.c

#include <stdio.h>

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;
}

addr2line使用方法:
1)首先生成调试版本的test.out文件:gcc -g test.c func.c -o test.out
2)开启core dump选项:ulimit -c unlimited
3)执行test.out./test.out
4)读取core文件,获取IP寄存器的值:dmesg core
5)使用addr2line定位代码行:addr2line 0x08048469 -f -e test.out

输出结果:

func
/home/delphi/code/ch2/5/func.c:7

第一行表示程序发生崩溃的函数名;
第二行表示段错误的文件地址和行号

3. strip

4. ar

5. nm

6. objdump

objdump -h的输出说明:
1) idx:段下标
2)Name:段标识符(名字)
3)Size:段所占空间的大小
4)VMA( Virtual Memory Address):段起始位置的虚存地址
5)LMA(Load Memory Address):段在存储空间中的加载地址
6)File off:段在目标文件中的相对位置,即偏移位置
7)Algn:短的边界对齐字节数

7. size

8. strings

声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件《专业嵌入式软件开发》所有!

上一篇下一篇

猜你喜欢

热点阅读