上位机图像处理和嵌入式模块部署(树莓派4b中的软件调试)

news2024/12/30 2:33:06

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        说到软件调试,有一点大家相信都有体会。那就是编写软件的时候,功能本身还是不算太复杂的。只需要前面流程、算法都设计好了,一般来说问题不大。但是调试软件的时候,特别是软件在客户现场崩溃的时候,这个时候就比较麻烦。所以一般情况下,我们要学会怎么调试嵌入式系统里面的软件bug,这是很重要的额一个技能。

        就商业价值来说,软件架构设计、软件debug和软件调优是三个最为重要的技能。建议大家好好掌握一下,不断提高个人在这三个方面的价值。

1、使用gdb调试

        gdb调试多是软件开发的时候进行的。目前树莓派4b上面是默认安装gdb调试软件的。因为编译工具也是在上面的,所以非常建议大家直接用它来进行软件开发和调试。和visual studio不同的是,大部分gdb调试都是用命令行进行的,这可能是大家唯一不习惯的地方。

2、使用coredump机制调试

        对于那些低概率出现的问题,一般使用系统提供的coredump机制进行调试。还有一种故障特别麻烦,就是程序闪退,这种情况下,其他方法都不好使,能用的基本只有coredump了。后期,即使我们在家里复现出了对应的现象,但是本质原因是不是一样的,只有coredump才说的清楚。

        在linux系统下面,使用coredump比较简单,首先输入ulimic -c unlimited,这样出现闪退的时候才会生成core文件。有了这个core文件之后,就可以配合刚才说到的gdb工具,进行进一步调试、分析原因了。怎么模拟出现闪退呢,其实最简单的就是下面两行代码,

int* p = 0;
*p = 0;

3、日志调试

        日志调试是非常有用的方式,不仅仅是debug,在软件调优、接口对接等方面也发挥着巨大的作用。当然一些开源库,比如说boost,还有一些商业开发库,比如qt,也都提供了对应的日志输出方法,不过还是建议大家自己写一个log输出函数,这样以后不管使用什么平台,都可以用它来进行开发和调试。

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

#include <iostream>
using namespace std;

FILE* selfLogFile = nullptr;
void customLog(const char* format, ...)
{
	if (selfLogFile == nullptr) {
		return;
	}
 
	time_t rawtime;
	struct tm* timeinfo;
	char timeBuffer[80];
 
	time(&rawtime);
	timeinfo = localtime(&rawtime);
	strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %H:%M:%S", timeinfo);
 
	char message[256];
 
	va_list args;
	va_start(args, format);
	vsnprintf(message, sizeof(message), format, args);
	va_end(args);
 
	fprintf(selfLogFile, "[%s] %s\n", timeBuffer, message);
 
	fflush(selfLogFile);
}

int main(int argc, char* argv[])
{
	selfLogFile = fopen("selfLog.log", "a");
	if (selfLogFile == nullptr) {
		return 1;
	}
	for (int i = 0; i < 5; ++i) {
		customLog("Debug: Iteration %d", i);
	}
	fclose(selfLogFile);
	return 0;
}

        整个代码最主要的内容,就是这里的customLog函数,它首先获取时间,接着获取客户输入的字符串,最后将时间和字符串merge到一起,共同存储在selfLogFile里面。大家可以实际编译一下,看看效果。

4、另外一种日志生成方法

        实际开发中,有的时候我们也会添加很多的std::cout打印。这个时候如果需要把它们转成log文件,其实只需要重定向一下即可,比如./process >> log.txt &。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32学习和实践笔记(20):定时器

1.定时器介绍 STM32F1的定时器一共有8个&#xff0c;由2个基本定时器&#xff08;TIM6、TIM7&#xff09;、4个通用定时器&#xff08;TIM2-TIM5&#xff09;和2个高级定时器&#xff08;TIM1、TIM8&#xff09;组成。 基本定时器的功能最为简单&#xff0c;类似于51单片机内定…

BGP选路原则

路由器对BGP路由的处理过程 l 策略机&#xff1a;操纵路径属性&#xff0c;对属性置值。通过影响路由表的生成&#xff0c;从而影响用户数据的转发 输入策略机影响自己及下游路由器 输出策略机不影响自己&#xff0c;只影响下游路由器 l 路由决策&#xff1a;根据BGP路…

AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;AI赋能分…

基于单片机公交语音报站系统设计 含源码,Proteus仿真原理图

资料下载地址&#xff1a;基于单片机公交语音报站系统设计 含源码,Proteus仿真原理图 1、前言 系统的总体设计需要充分运用STC单片机作为主控控制芯片&#xff0c;完成主控控制电路的基本设计&#xff0c;辅助控制电路是语音控制电路、12864显示电路、按键控制电路、…

通过阿里云OOS实现定时备份redis实例转储到OSS

功能背景 随着企业业务数据的快速增长&#xff0c;Redis 作为高性能的内存数据存储方案&#xff0c;在多种应用场景下承担着重要的角色。为确保数据安全&#xff0c;定时备份成为了不可或缺的一环。Redis 实例定时备份是关键数据库管理任务的一个重要组成部分&#xff0c;它主…

雷雨天气频繁,输电线路如何防雷?避雷器在线监测装置智能护电

春日将近&#xff0c;夏日绵长。再过几天便到立夏了&#xff0c;根据《二十四节气歌》的记载&#xff0c;立夏的到来意味着夏季的序幕正式拉开。立夏之时&#xff0c;万物开始增大、成长&#xff0c;是生命力旺盛的体现。此时气温回升快&#xff0c;炎热的气息逐渐袭来&#xf…

优化打印性能:为您的 Magicard 打印机选择合适的清洁用品

Magicard打印机是许多企业和组织中信赖的首选&#xff0c;其可靠性和打印质量让其成为许多人的首选。然而&#xff0c;为了保持这种可靠性和质量&#xff0c;定期清洁和维护是至关重要的。在这篇文章中&#xff0c;我们将介绍不同型号的Magicard打印机以及它们所需的正确清洁卡…

CTF-Show nodejs

web334 下载附件&#xff0c;有两个文件 在Character.toUpperCase()函数中&#xff0c;字符ı会转变为I&#xff0c;字符ſ会变为S。 在Character.toLowerCase()函数中&#xff0c;字符İ会转变为i&#xff0c;字符K会转变为k。 所以用ctfſhow 123456登录就可以出flag了 w…

磁共振质子密度脂肪分数(MRI-PDFF)适用于无创评估肝脂肪含量 目前其已完成市场化

磁共振质子密度脂肪分数&#xff08;MRI-PDFF&#xff09;适用于无创评估肝脂肪含量 目前其已完成市场化 磁共振质子密度脂肪分数&#xff08;MRI-PDFF&#xff09;又称为MRI肝脏脂肪定量&#xff0c;是一种运用磁共振技术对整个肝脏中的脂肪进行客观、定量、无创评估的成像方法…

react,Chart

一、基础图&#xff1a;https://ant-design-charts.antgroup.com/ Ant Design Charts 1. 首先要下载ant-design/charts&#xff0c;然后在页面中添加如下柱状图代码: import React from react; import { Column } from ant-design/chartsconst DemoColumn: React.FC () …

如何正确进行Lazada、速卖通、Shopee店铺补单?这些建议助你提升排名!

如今&#xff0c;在Lazada、速卖通和Shopee等电商平台上开店的卖家越来越多&#xff0c;保持店铺稳定运营成为每个卖家都需思考的问题。现在让我们一起来探讨一下&#xff0c;哪些运营上需要注意的要点。 1、精心挑选产品 跨境电商与国内电商的核心都在于产品。只有选择到优质…

spark3.0.0单机模式安装

注&#xff1a;此安装教程基于hadoop3集群版本 下载安装包 下载spark3.0.0版本&#xff0c;hadoop和spark版本要对应&#xff0c;否则会不兼容 用xftp上传Linux虚拟机&#xff0c;上传目录/bigdata&#xff08;可修改&#xff09; 解压 tar -zxvf /bigdata/spark-3.0.0-bin-h…

Rust Web开发实战:构建高效稳定的服务端应用

如果你厌倦了缓慢、占用大量资源且不稳定的模板化Web开发工具&#xff0c;Rust就是你的解决方案。Rust服务提供了稳定的安全保证、非凡的开发经验&#xff0c;以及能够自动防止常见错误的编译器。 《Rust Web开发》教你使用Rust以及重要的Rust库(如异步运行时的Tokio、用于Web…

AList 网盘挂载,在线浏览各种网盘资源,部署并挂载到本地——教程(Linux+Windows)

目录 下载&#xff1a;Tags alist-org/alist GitHub Linux中安装和挂载网盘 使用docker安装alist ​编辑 安装davfs2 将网盘挂载到本地 Windows中安装和挂载网盘 下载&#xff1a;Tags alist-org/alist GitHub 选择最新版下载&#xff0c;也可以选择其它版本 官方文…

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网&#xff08;IoT&#xff09;设备中的典型应用案例包括但不限于以下几个方面&#xff1a; 1. 环境监测系统&#xff1a; 使用传感器来监测温度、湿度、气压等环境因素&#xff0c;并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…

快递费

快递费 题目&#xff1a; 如果正在寄快递&#xff0c;他了解到快递在 1kg 以内的按起步价20元计算&#xff0c;超出部分按每kg按1元计算&#xff0c;不足1kg部分按1kg计算。如果加急的话要额外付五元&#xff0c;请问总共要支付多少快递费 输入描述&#xff1a; 第一行输入…

《数据结构》(学习笔记)(王道)

一、绪论 1.1 数据结构的基本概念 数据&#xff1a;是信息的载体&#xff0c;是描述客观事物属性的数、字符以及所有输入到计算机中并被计算机程序识别和处理的符号的集合。&#xff08;计算机程序加工的原料&#xff09;数据元素&#xff1a;数据的基本单位&#xff0c;由若干…

操作系统(Operating System)知识点复习——第十二章 文件管理

目录 0.前言 1.Overview 2.文件的组织方式 ①The Sequential File 顺序文件 ②The Pile堆 ③The Indexed Sequential File 索引顺序文件 ④The Indexed File 索引文件 ⑤The Direct or Hashed File 直接文件或者散列文件 3.文件目录 Structure 1&#xff1a;简单目录…

在ubuntu上搭建nexus私有仓库(指定版本以及jdk!)

前言 本来以为搭建一个nexus随随便便就好了&#xff0c;但是遇到了最新版本根本没办法在jdk17下面正常运行—起码我调了一下不知道怎么运行&#xff0c;我才知道。。。不升级版本其实是很有道理的。 这一篇是最新版本的尝试&#xff1a; 在ubuntu上搭建nexus私有仓库[失败草稿…

红米K40手机刷机详解

了解什么是卡刷、什么是线刷 卡刷&#xff0c;就是把系统包放到你手机的SD卡&#xff0c;这一步&#xff0c;不用手机解BL锁&#xff0c;不用root&#xff0c;直接小米助手下载就可以刷。线刷就是用数据线连接电脑&#xff0c;通过XiaoMiFlash直接刷到手机&#xff0c;这一步权…