Linux调试私房菜(三)开发中的辅助工具

news/2024/11/24 7:44:19/

六、开发中的辅助工具

1. 什么是开发环境?

  • 构建环境
    • 代码编写,程序编译,版本控制(可选)
  • 调试环境
    • 用于定位问题的辅助工具集
  • 测试环境
    • 用于验证目标程序是否满足用户的显性需求和隐性需求

2. 嵌入式开发中的时间分配

  • 代码编写及目标构建  (20%
  • 测试,调试,bug修复(80%

3. 问题:如何提高开发效率?

工欲善其事,必先利其器!

4. GNUGCC编译器提供了配套的辅助工具集(Binutils)

Binutils- GNU Project - Free Software Foundation

5. addr2lne

  • 将指定地址转换为对应的文件名行号
  • 常用于分析和定位内存访问错误的问题

6. addr2line示例:定位0地址访问

  1. 开启core dump 选项
    • ulimit -c unlimited
    • 记录程序崩溃的最后一刻,内存布局和寄存器的值
  2. 运行程序,并生成崩溃时的core文件
    • 执行导致程序崩溃的测试用例
  3. 读取core文件,获取IP寄存器的值( 0x08048000 )
    • dmesg core
  4. 使用addr2line定位代码行
    • addr2line 0x08048000 -f -e test.out

ip寄存器访问地址时出现段错误

7. strip

  • 剔除程序文件中的调试信息,减少目标程序的大小
  • 一般在程序发布前都需要将调试信息剔除
  • 过多的调试信息可能影响程序的执行效率

strip test.out

8. 注意事项

  • 几乎所有的调试辅助工具都依赖于目标文件中的调试信息
  • 调试信息的运用能够快速定位问题
  • 使用 gcc 编译程序时使用 -g 选项生成调试信息
  • 发布程序时再考虑是否使用 strip 剔除调试信息

9. ar

  • 打包目标文件
    • ar crs libname.a x.o y.o

  • 解压目标文件
    • ar x libname.a

10. nm

  • 列出目标文件中的标识符(变量名,函数名)
  • 输出结果由三部分组成:{地址标识符}

 段标识说明

由于未链接,所以地址都是相对偏移地址。

链接后,地址就是程序运行时实际地址。

11. objdump

  • 反汇编目标文件,查看汇编到源码的映射
    • objdump -d func.o
    • objdump -S func.o
      • 用于检查时序错误、编译器优化错误。
  • 查看目标文件中的详细段信息
    • objdump -h test.out

objdump -h的输出说明

12. size

  • 获取目标文件中的所有段大小
    • size test.out
    • 嵌入式设备时,可能存在资源限制。有可能进行优化,保证每个段都可以顺利的存储到设备中去。

13. strings

  • 获取目标文件中的所有字符串常量
    • strings test.out
    • 嵌入式设备时,可能存在资源限制。字符串常量会占用资源,可以获得所有字符串常量。

一、编译阶段

nm                 获取二进制文件包含的符号信息

strings           获取二进制文件包含的字符串常量

strip               去除二进制文件包含的符号

readelf           显示目标文件详细信息

objdump         尽可能反汇编出源代码

addr2line        根据地址查找代码行

二、运行阶段

gdb                强大的调试工具(略)

gdb core         gdb查看core文件

ldd                 显示程序需要使用的动态库和实际使用的动态库

strace            跟踪程序当前的系统调用

ltrace             跟踪程序当前的库函数

time               查看程序执行时间、用户态时间、内核态时间

gprof              显示用户态各函数执行时间

valgrind          检查内存错误

mtrace           检查内存错误

三、其他

proc文件系统

系统日志

来自 <linux常用调试工具简介_zhliu1991的博客-CSDN博客>


http://www.ppmy.cn/news/529431.html

相关文章

Windows操作系统——WindowsVulnScan提权辅助工具简介与使用教程

文章目录 WindowsVulnScan提权辅助工具简介与使用教程1.工具简介2.工具使用教程1、运行powershell脚本KBCollect.ps1收集信息2.进入powershell3.输入脚本名称并运行4.KBCollect.ps1脚本运行结束后5.运行python脚本cve-check.py -u 创建CVEKB数据库6.运行python脚本7.运行python…

怎么关闭计算机第三辅助工具,电脑出现屏幕键盘和辅助工具管理器怎么处理?...

一、辅助键盘快捷键 按键 目的 右侧 SHIFT 键八秒钟 切换“筛选键”的开和关。 左边的 ALT 左边的 SHIFT PRINT SCREEN 切换“高对比度”的开和关。 左边的 ALT 左边的 SHIFT NUM LOCK 切换“鼠标键”的开和关。 Shift 键五次 切换“粘滞键”的开和关。 Num Lock 键五秒钟 …

三个有用的SQL辅助工具

编写人&#xff1a;CC阿爸 2015-1-23 工欲善其事必先利其器&#xff0c;今天在这里&#xff0c;我想与大家一起分享三个有用的SQL辅助工具。有兴趣的同学&#xff0c;可以一同探讨与学习一下&#xff0c;否则就略过吧。 相信大家在平时的开发项目中&#xff0c;肯定遇到过&…

java开发工具以及辅助软件

一、根据接口路径模拟发送Post、Get、Put等请求 1、下载谷歌游览器 &#xff08;博主不知道这个插件能不能独立运行&#xff0c;所以需要下载谷歌游览器&#xff09; 2、下载Postman插件 网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/19tLCbcQAlKKVgwPdk4-PKw…

python写安卓游戏辅助软件_python微信跳一跳辅助软件

python微信跳一跳辅助软件是一款跳一跳小游戏的刷分辅助工具应用&#xff0c;用户在微信玩跳一跳游戏的时候使用软件可以随意的修改其中的成绩分数&#xff0c;按照你自己的意愿进行相关的改变&#xff0c;更好的帮助你达成游戏的最高峰&#xff0c;喜欢就快来下载吧。 python跳…

ChatGPT 辅助软件编程

前言 总结一些在软件编程中使用 ChatGPT 的命令,以助力提升开发效率。 文章目录 前言一、作用二、举例1. 写代码2. 解析程序3. 找 Bug4. 语言转换5. Python 实现人工智能相关代码一、作用 利用 ChatGPT 快速生成代码,程序员拿到代码后稍加修改完善实现自己的业务逻辑。注意:…

自学前端编程有哪些好用的辅助工具呢?

大家好&#xff0c;我是一名新手Webber。学习web前端也有一些时光了。学习是一件能让人感觉充实而且快乐的事情&#xff0c;在自学的过程中&#xff0c;专注的学习固然重要&#xff0c;而在专注学习的同时如果能有一些好用的工具辅助我们无疑会锦上添花。本篇文章我会分享一些我…

10款编程辅助工具,让你的编程事半功倍!

今日分享 君子性非异也&#xff0c;善假于物也。 市面上有海量的软件开发工具&#xff0c;选择最佳的软件开发工具或开发辅助工具能帮助我们大大的提高编码效率&#xff0c;今天分享10款常用的辅助开发工具。 01 Notepad Notepad 是程序员必备的文本编辑器&#xff0c;软件小巧…