嵌入式开发/调试辅助工具
开发辅助工具开发环境组成通常开发环境由三部分组成:
构建环境:包括代码编写,程序编译,版本控制等功能。
调试环境:用于定位问题的辅助工具集
测试环境:用于验证目标程序是否满足用户要求的显性需求和隐性需求嵌入式开发中,通常有20%的时间用于目标构建,80%的时间用于测试、调试和bug修复,工欲善其事,必先利其器,提高开发和调试效率十分重要。GNU为GCC编译器提供了配套的辅助工具集(Binutils)开发工具集addr2line将指定地址转换为对应的文件名和行号,常用于分析和定位内存错误的问题addr2line 示例:定位0地址访问
#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;}示例代码func.c#include <stdio.h>int* g_pointer;void func(){ *g_pointer = (int)"D.T.Software"; return;}1、开启core dump 选项ulimit -c unlimited
2、运行程序,并生成崩溃的core文件
执行导致程序崩溃的测序用例,执行后我们看到生成的core 文件3、读取core文件,获取IP寄存器的值(0x08048000)dmesg core
在文件的最后几行,内容如下:
这的地址 0x08048000 即是ip寄存器的地址。
4、使用addr2line 定位代码行
Addr2line 0x08048000 -f -e test.out
strip剔除称故乡文件中的调试信息,减少目标程序的大小一本在程序发布前都选哟将调试信息剔除
过多的调试信息可能会影响程序的执行效率
strip test.out
注意事项:
几乎所有的调试辅助工具都依赖于目标文件中的调试信息调试信息的运用可以快速定位问题
使用gcc 编译程序时使用-g 生成调试信息
发布程序时再考虑是否使用strip 剔除调试信息ar打包目标文件, ar crs libname.a x.o y.o解压目标文件,ar x libname.a
nm列出目标文件中的标识符(变量、函数名)
输出结果由三部分组成:{地址、段、标识符}
段标识说明
objdump反汇编目标文件、查看汇编到源码的映射objdump -d func.o
objdump -S func.o
查看目标文件中的详细段信息
objdump -h test.out
输出说明:
在这里我们有必要讲解一个概念:
首先存在三个地址:虚拟内存地址,加载地址,运行地址当我们执行可执行程序a.out后:
1.操作系统为该程序分配一个进程,自然会为其分配内存(虚拟内存)。
2.加载a.out中的各个段到内存(加载地址),这里加载依据的就是上述objdump -h中的file off3.执行可执行程序(运行地址)。
size获取目标文件中的所有段大小, size test.outstrings获取目标文件中的所有字符串常量,string test.out
云专线业务在当今企业业务中发挥了重要作用,尤其是在当今互联网时代,云专线是互联网经济运行中最重要的东西。所谓专线,较之于普通网络连接而言。
嵌入式开发/调试辅助工具相关推荐
- 开源 iOS 性能优化/调试辅助工具集 MTHawkeye
MTHawkeye 是美图 iOS 团队在使用的调试辅助.性能优化辅助工具集,旨在帮助 iOS 开发者提升开发效率.辅助优化性能体验. 在产品开发周期内,我们引入 MTHawkeye 来帮助我们更快的 ...
- 嵌入式开发调试学习与思考
截至今天,自己负责的一个项目算是告一段落,前前后后5个多月时间. 该项目是对公司设计的基于powerpc的处理器进行FPGA仿真阶段的软件验证,以及bootloader和kernel移植,以便芯片进行 ...
- mac json格式化工具_一个在 MAC 上 iOS/Flutter 开发的辅助工具
大家好,我是章鱼猫. 今天给大家推荐的这个开源项目,是来自于我们公众号读者的投稿,这个东西还挺好的. 如果你作为读者,也有自己的开源项目或者你也有想推荐的开源项目,都可以向我们投稿,我们就是致力于帮助 ...
- 平时资料综合汇总 eclipse开发代码辅助工具 普陀山
软件下载网址: http://www.xdowns.com/soft/188/215/2010/Soft_61286.html http://www.xdowns.com/soft/27/zhanlu ...
- 微信开发调试小工具进化→微信用户发送信息模拟器发布!——这标题起真是好数码暴龙的说...
直接说正题吧.最近在做微信第三方服务器.在模拟用户发过来的请求方面,网上流传着一个"微信开发调试小工具",谁做都不知道了.反正我觉得那个东西看起来挺不爽的,因为其信息发送类型不是很 ...
- 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...
- 自己动手,开发项目辅助工具
在项目的开发过程中,很多人都遇到过大量虽有不同,但有着共同规律的代码.比如PetShop项目的实体层,每个实体类中描述的都是对应数据库表的结构,除了表和字段名不一样,规律都一样.如果手动生成和维护这部 ...
- iOS 开发常用辅助工具
工欲善其事,必先利其器.作为一个合格的iOS开发者,熟练的使用各种开发或辅助开发的工具也算是一项必备技能吧,下面是我整理的一些工具及其应用场景和使用方法. 文档浏览工具 - Dash 网络抓包工具 C ...
- 猿创征文|【开发工具-我打辅助的】2022软件开发常用辅助工具
总览 常说工欲善其事必先利其器,人力终归有限,而软件开发又是一个相当耗费时间和经历的过程,而简捷的开发辅助工具则能够大大提高我们软件工程师的开发效率. 必关注网站 国家信息安全漏洞库 官网:https ...
最新文章
- Kosaraju 算法查找强连通分支
- Python之web开发(二):python使用django框架搭建网站之新建文件
- 苹果a10处理器_iPhone运行安卓系统卡成翔,苹果A系处理器彻底跌落神坛!
- vue 声明周期函数_vue-router路由守卫-上
- cocos2dx 3.1从零学习(三)——Touch事件(回调,反向传值)
- Tony的口胡呼呼(。-ω-)zzz
- android多个点的圆形进度条,Android 自定义圆形进度条总结
- 学习Java软件开发,可以从事什么工作?
- 使用腾讯云文字识别提取图片中的文字内容
- paypal接入指南
- 有对象的程序猿都是怎么写代码的
- yolo极大抑制_Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制...
- Simplicity Studio V5 建立一个空工程后如何添加外设驱动
- React Ant Design 通过 DatePicker获取一周的起止时间
- Git 同步代码两例常见报错
- 数据库优化思路 oracle,自己几年前整理的数据库优化技术方案
- 了解操作系统,什么是操作系统Operation System?
- 西软服务器linux,详细讲解西软FOXHIS增量备份与恢复方法
- 帝搜软件新增今日头条和B站(哔哩哔哩)seo排名优化功能
- 1623.闷声发大财
热门文章
- tomcat(2)--集群
- hibernate建表 一对多 多的一方控制一的一方
- [重构到模式-Chain of Responsibility Pattern]把Fizz Buzz招式重构到责任链模式
- 分享一个超棒的在线jQuery mobile原型设计开发工具 - codiqa
- 在VB.NET中应用SQLDMO
- ajax formdata提交上传,关于利用h5 FORMDATA ajax方式提交多文件上传,上传表单
- python升维方法_python机器学习12:数据“升维”
- 【消息中间件】浅谈中间件优缺RabbitMQ基本使用
- java日期时间的转化
- bootstrap轮播图自动播放响应式箭头居中