OneOS下调试支持的几种方式
方法论
当我们遇到问题,应该怎么办?这不仅应用于程序开发,也是我们在生活中遇到问题的时候,应该想的事儿,怎么办!趁着此次机会,我好好想了七秒钟。
- 先问是不是问题,如果不是就不用解决了
- 如果确实是问题,那就得先找到问题出现位置,也就是定位问题。怎么定位呢?缩小问题范围是一个办法
- 定位问题后,就得分析问题
- 最后,解决问题
也就是:问题->定位->分析->解决。我觉得吧,这些步骤,在程序开发中得调试,也是非常有趣的实践方法。
程序开发调试
软件开发过程中,总是经常出现不如意的结果,这个时候就要调试。 并且调试在软件生命周期中,会占用大量的时间,拥有非常大的时间跨度。
出现问题的现象很多,出现的阶段和种类也很多,比如编译阶段出错了,这时候就看编译报错信息就好了。这种错误一般容易解决。软件运行阶段异常了,这时候就需要寻找问题了。
可以通过点灯或者打印确定程序执行流程,得出执行在哪一部分出问题了。
可以通过打印变量等,来查看自己怀疑的点。以上都是比较简单的调试方法。
更多时候,我们更愿意使用调试工具,比如keil调试,gdb调试,jlink调试。可以查看执行流程,函数调用关系,栈信息,全局变量等。
OneOS与调试
上述说明了常见的调试,对OneOS专有的调试组件产生了很多好奇,毕竟调试占据了开发者大量的时间,如果有好的工具能极大地减少调试时间,那可真是太美妙了。
在OneOS有写道:提供控制台调试功能、查看系统状态功能,可帮助开发者进行故障定位,目前包括日志系统组件、shell控制台交互组件以及常用的故障定位组件。
控制台调试功能
先学习下控制台调试,其实就是shell命令行工具,提供了一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。在控制终端输入命令,控制终端通过某个通道(例如串口)将命令传给设备里的shell,shell会读取设备输入命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,回应通过原路返回,将结果显示在控制终端上。
提供了很多的命令来查看系统信息,比如内存占用,任务信息,栈是否溢出等。
DLOG 日志系统
日志(log)是对发生某个事件的记录,并进行显示或者保存到文件。其实就是打印信息啦,但做了更多的封装,更多的功能。
支持 4 个等级,优先级由高到低 DLOG_ERROR DLOG_WARNING DLOG_INFO DLOG_DEBUG
。更低的等级,可显示更多的信息。
这个日志系统,挺有趣的,如果出现问题了,我可能首先会选择使用shell命令行工具,以及把DLOG日志系统调整为DLOG_DEBUG
。
eCoreDump组件
eCoreDump
组件实现了嵌入式系统的coredump功能,记录当前程序的状态并打包成elf格式的corefile
,可以配合gdb离线解析调用栈,查看临时变量。
感觉是对coredump
做了整理和移植到OneOS
上去了,这个调试功能可能不是开发阶段使用,而是部署软件后的使用,当在运行期间出现问题了,会生成eCoreDump
文件,并保存在文件系统中,等到开发者从文件系统中拿出来,然后配合gdb来调试分析错误原因。
内存监测
通过调用mem_monitor_auto_init初始化自动监测,制定必要的内存地址,大小,检测方法,hash函数,以及回调,开始了自动监测,检测点是在任务切换中检测,看是否任务对此内存是否修改过。
有点意思噢,针对踩内存的问题,相信非常有用。
栈回溯
在系统运行或调试过程中,程序总是出现一些出乎意料的现象(例如程序异常或者某个任务运行不是预料的),为了帮助用户快速定位问题,解决用户定位问题难,在操作系统中添加了栈回溯功能。
栈中保存着函数的返回地址、局部变量等,那么我们可以从这些返回地址来确定函数的调用关系、调用顺序。我们通过栈回溯可以查看当前的上下文。
结尾
以上就是OneOS
下调试支持的几种方式,通过menuconfig
进行配置,我觉得自己受益良多,您呢?
(Top) → Components→ Diagnose Configuration
[ ] Stack back trace enable
[ ] Monitor CPU usage
[ ] Enable wireshark dump
eCoreDump --->
Memory Monitor --->
OneOS下调试支持的几种方式的更多相关文章
- VS Code - Debugger for Chrome调试JavaScript的两种方式
VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...
- linux下软件安装的几种方式
linux下软件安装的几种方式(主要有源码安装, rpm安装, yum安装). 一:源码安装 几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc. ...
- 【转】Linux下软件安装的几种方式
转自Linux下软件安装的几种方式 Linux 系统的/usr目录 Linux 软件安装到哪里合适,目录详解 Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统 ...
- 访问WEB-INF下JSP资源的几种方式(转)
访问WEB-INF下JSP资源的几种方式 方法一: 本来WEB-INF中的jsp就是无法通过地址栏访问的,所以安全. 如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置ser ...
- VSCode的Python扩展下程序运行的几种方式与环境变量管理
在VSCode中编写Python程序时,由于有些地方要使用环境变量,但是发现设置的环境变量有时不起作用,花了点时间研究了一下,过程不表,直接说结论. 首先,环境变量的设置,Python扩展中有三种方式 ...
- linux 下部署nodejs(两种方式)
本次博客的编写时用的系统环境,刚装好的Centos 6.4 64位虚拟机. 另外关于linux 其他系统的安装 可以参考https://github.com/joyent/node/wiki/Ins ...
- WEB-INF目录下文件复制的几种方式
2018年1月31日 10:42:55 工作完写点博客记录下. 需求:从web-inf下拷贝文件到指定目录. 目录结构 直接贴代码 第一种方式,字节流读取 try { int index = 0; S ...
- Ubuntu下软件安装的几种方式,apt,dpkg工具的使用
通常 Linux 上的软件安装主要有四种方式: 在线安装 从磁盘安装deb软件包 从二进制软件包安装 从源代码编译安装 这几种安装方式各有优劣,而大多数软件包会采用多种方式发布软件,所以我们常常需要全 ...
- 设置Mybatis打印调试sql的两种方式
http://blog.csdn.net/gao36951/article/details/53641432 ********************************************* ...
随机推荐
- 【架构视角】一篇文章带你彻底吃透Spring
框架的意义 对于程序员来说,我们通常知道很多概念,例如组件.模块.系统.框架.架构等,而本文我们重点说 框架. 框架,本质上是一些实用经验集合.即是前辈们在实际开发过程中积攒下来的实战经验,累积成一套 ...
- for循环+数字类型补充
一.for循环 1.循环取值 1.1列表类型: 定义l=['a','b','c'],要提取列表中的值 如果采用while循环的话: print(len(l)) i=0 while i& ...
- 渗透:dSploit
dSploit--开源的专业的Android平台安全管理工具包 只能在横屏模式下工作,即使你旋转你的设备也将继续保持横屏,如果你有一个应用程序,如旋转控制器,迫使每一个应用程序旋转,将导致dSploi ...
- TypeScript 学习的随笔
TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准 安装TypeScript npm install -g typescript 编译 tsc app.t ...
- 使用 Postman 实现 API 自动化测试
背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉,对于开发人员和测试人员而言,使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式.但 postman 本身是一个 ...
- 值得注意的: c++动态库、静态库、弱符号__attribute__((weak))以及extern之间的关系
先说结论: ①:动态库优先级最差,如果同时有静态库和动态库,那么首先使用的是静态库函数. ②:如果只有两个或多个动态库,那么首先使用的是最开始链接的动态库函数: ③:弱符号函数在动态库中是起任何作用的 ...
- IOU->GIOU->CIOU->Focal_loss
IOU->GIOU->CIOU->Focal_loss 参考b站 总览 2022-1-3号补充 该链接下关于算是函数讨论 https://zhuanlan.zhihu.com/p/1 ...
- 一次生产环境的docker MySQL故障
问题 昨天下午本来要去吃下午茶,然后前端小伙伴突然说接口怎么崩了,我登上sentry一看,报错了 (2005, "Unknown MySQL server host 'mysql' (-3) ...
- 如何在 pyqt 中捕获并处理 Alt+F4 快捷键
前言 如果在 Windows 系统的任意一个窗口中按下 Alt+F4,默认行为是关闭窗口(或者最小化到托盘).对于使用了亚克力效果的窗口,使用 Alt+F4 最小化到托盘,再次弹出窗口的时候可能出现亚 ...
- Tomcat启动失败:java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager
项目开发中发现服务器上Tomcat启动失败 开始定位 第一步:打开tomcat日志catalina.log: 2017-07-25 17:02:43,799 [Catalina-startStop-1 ...