方法论

当我们遇到问题,应该怎么办?这不仅应用于程序开发,也是我们在生活中遇到问题的时候,应该想的事儿,怎么办!趁着此次机会,我好好想了七秒钟。

  1. 先问是不是问题,如果不是就不用解决了
  2. 如果确实是问题,那就得先找到问题出现位置,也就是定位问题。怎么定位呢?缩小问题范围是一个办法
  3. 定位问题后,就得分析问题
  4. 最后,解决问题

也就是:问题->定位->分析->解决。我觉得吧,这些步骤,在程序开发中得调试,也是非常有趣的实践方法。

程序开发调试

软件开发过程中,总是经常出现不如意的结果,这个时候就要调试。 并且调试在软件生命周期中,会占用大量的时间,拥有非常大的时间跨度。

出现问题的现象很多,出现的阶段和种类也很多,比如编译阶段出错了,这时候就看编译报错信息就好了。这种错误一般容易解决。软件运行阶段异常了,这时候就需要寻找问题了。

可以通过点灯或者打印确定程序执行流程,得出执行在哪一部分出问题了。

可以通过打印变量等,来查看自己怀疑的点。以上都是比较简单的调试方法。

更多时候,我们更愿意使用调试工具,比如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下调试支持的几种方式的更多相关文章

  1. VS Code - Debugger for Chrome调试JavaScript的两种方式

    VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...

  2. linux下软件安装的几种方式

    linux下软件安装的几种方式(主要有源码安装, rpm安装, yum安装). 一:源码安装 几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc. ...

  3. 【转】Linux下软件安装的几种方式

    转自Linux下软件安装的几种方式 Linux 系统的/usr目录 Linux 软件安装到哪里合适,目录详解 Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统 ...

  4. 访问WEB-INF下JSP资源的几种方式(转)

    访问WEB-INF下JSP资源的几种方式 方法一: 本来WEB-INF中的jsp就是无法通过地址栏访问的,所以安全. 如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置ser ...

  5. VSCode的Python扩展下程序运行的几种方式与环境变量管理

    在VSCode中编写Python程序时,由于有些地方要使用环境变量,但是发现设置的环境变量有时不起作用,花了点时间研究了一下,过程不表,直接说结论. 首先,环境变量的设置,Python扩展中有三种方式 ...

  6. linux 下部署nodejs(两种方式)

    本次博客的编写时用的系统环境,刚装好的Centos 6.4  64位虚拟机. 另外关于linux 其他系统的安装 可以参考https://github.com/joyent/node/wiki/Ins ...

  7. WEB-INF目录下文件复制的几种方式

    2018年1月31日 10:42:55 工作完写点博客记录下. 需求:从web-inf下拷贝文件到指定目录. 目录结构 直接贴代码 第一种方式,字节流读取 try { int index = 0; S ...

  8. Ubuntu下软件安装的几种方式,apt,dpkg工具的使用

    通常 Linux 上的软件安装主要有四种方式: 在线安装 从磁盘安装deb软件包 从二进制软件包安装 从源代码编译安装 这几种安装方式各有优劣,而大多数软件包会采用多种方式发布软件,所以我们常常需要全 ...

  9. 设置Mybatis打印调试sql的两种方式

    http://blog.csdn.net/gao36951/article/details/53641432 ********************************************* ...

随机推荐

  1. 程序员不得不知道的 API 接口常识

    说实话,我非常希望两年前刚准备找实习的自己能看到本篇文章,那个时候懵懵懂懂,跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写. 至今我仍清晰地记得,那个电商教程是怎么定义接口的: 管它是增加.修 ...

  2. 【原创】记一次对X呼APP的渗透测试

    获取CMS并本地安装 X呼是一款开源的客服CMS系统,访问官网,下载安卓版本的app和源码本地搭建: 发现这cms预留admin表中的用户就不少.... 直接用预留的密码解密,然后就能登录手机APP了 ...

  3. CVE-2021-35042

    CVE-2021-35042 漏洞介绍 Django 是 Python 语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架. 漏洞影响版本:django 3.1.3.2 202 ...

  4. MyBatisPlus实现分页和查询操作就这么简单

    <SpringBoot整合MybatisPlus基本的增删改查,保姆级教程>在这篇文章中,我们详细介绍了分页的具体实现方法.但是,在日常的开发中还需要搜索功能的.下面让我们一起动起手来,实 ...

  5. Nvidia Triton使用教程:从青铜到王者

    1 相关预备知识 模型:包含了大量参数的一个网络(参数+结构),体积10MB-10GB不等 模型格式:相同的模型可以有不同的存储格式(可类比音视频文件),目前主流有torch.tf.onnx和trt, ...

  6. Spring 源码(17)Spring Bean的创建过程(8)Bean的初始化

    知识回顾 Bean的创建过程会经历getBean,doGetBean,createBean,doCreateBean,然后Bean的创建又会经历实例化,属性填充,初始化. 在实例化createInst ...

  7. Vulhub靶场搭建教程

    Vulhub靶机环境搭建 Vulhub地址: Vulhub下载地址 一.所需环境 1.Ubuntu16.04 2.最新版本Docker 二.安装之路 1.下载Ubuntu16.04下载地址(迅雷下载6 ...

  8. C#中的CSV文件读写

    目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...

  9. flink窗口分类

    窗口分类 按照驱动类型分类 窗口本身是截取有界数据的一种方式,所以窗口一个非常重要的信息就是"怎样截取数据".换句话说,就是以什么标准来开发和结束数据的截取. 按照驱动类型分类主要 ...

  10. 七、服务器硬件及RAID配置实战

    一.RAID磁盘阵列介绍 磁盘阵列的全名(Redundant Arrays of Inexpensive Disk,RAID),中文简称是独立冗余磁盘阵列.冗余(如果磁盘出现故障,可以保证数据不丢) ...