聊聊ASSERT处理在某些场景下的合理用法

        先看看ASSERT的介绍

       编写代码时,我们总是会做出一些假设,ASSERT断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

       案例:

        最近在跟一个客户反馈的bug,客户是做的安防家用云台机监控设备,说“设备挂测后异常,无法正常使用”的问题,也就是产品在老化的时候,本身应该是在APP端可以实时查看设备推流的视频的,幸运的是客户抓到了运行日志,以前客户也老化过很长时间未出现过这种问题,当客户把问题反馈到对外沟通群,公司甚是重视,立马组织兵力调查,千万不能耽误客户量产。

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/

       调查分析:

        接到这个任务后,查阅了日志,日志足足抓了有三十MB,启动大脑快速搜索蛛丝马迹,终于看到一个比较明显的错误,如下:

*********IDRFRAME_OVERFLOW ,frame_lost,len=86400************
[h264_vdi_enc_one_frame] H264_code_frame: overflow

       也就是说编码溢出了,在某些场景下,图像噪点麻点太多,导致预设的编码输出buffer不够存放编码出这张图的编码后数据,导致overflow。还好提示够明确,不然又不好复现真实要抓狂。找到H264 PictureBuffer.c: 535行看了一下,就是一个ASSERT处理,为啥会卡住呢?点开这个ASSERT的定义真是一目了然啊!如下

       兄弟啊,这ASSERT里面居然有个while(1),真的要崩溃了,不就卡死在这里面吗?

       找到问题点后,找对应负责这个模块的工程师同事沟通了一下,给我的建议是降低QP配置,也就是编码质量往下降一点,编出来的数据量会小一点,这当然也是一个有效手段。但是我觉得这还是一个问题,变成一个更加难复现的问题,从本质上、原理上还是存在再进入这个ASSERT在这里执行while(1)的可能性,概率虽然会降低,但是出现了它的后果是相当于死机的TOP0级别了,不容忽视吧!

      谈了一下我的想法,这种硬件视频编码器如果数据大了不够存,大不了就不要这个数据了嘛,这一帧编码失败返回就行了, 顶多影响一个GOP的数据吧,这顶天了!你如果一直在while(1)不就是等同死机了吗?因此我建议去掉while(1)处理,有错了就返回重新再出发,不必卡死在那。

     心得体会:

      有些错误我们是可以预估到,但是没法完全避免,首先我们要有防错的思维,就像我那同事提出的降低编码等级,数据量小了,也是一个有效手段,但是不能以防万一,不能根治;其次,在防错的基础防线上没守住的时候,我们还得有纠错的思路,让损失降低到最小吧!

     软件编程防错和纠错都必不可少,多一些质量管理的思维,考虑全面一点,程序也就更健壮一些。

     

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构编程实践20讲(Python版)—20并查集

本文目录 20 并查集(Union-Find Set)S1 说明并查集的定义并查集基本操作并查集优化并查集特点应用领域 S2 示例S3 问题1:朋友圈问题S4 问题2:网络连接恢复问题S5 问题3:随机生成迷宫 往期链接 01 数组02 链表03 栈04 …

【热门】用ChatGPT做智慧农业云平台——农业ERP管控系统

随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…

vue3中监视 Reactive对象中的属性

watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组 一、框架&#xff1a; <template><div class"divBox"><h2>姓名&#xff1a;{{ person.…

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

一、单选题 1、下列选项中关于 turtle.color(red) 语句的作用描述正确的是&#xff1f;&#xff08; &#xff09; A. 只设置画笔的颜色为红色 B. 只设置填充的颜色为红色 C. 设置画笔和填充的颜色为红色 D. 设置画笔的颜色为红色&#xff0c;设置画布背景的颜色为红色 正…

告别ELK,APO提供基于ClickHouse开箱即用的高效日志方案——APO 0.6.0发布

ELK一直是日志领域的主流产品&#xff0c;但是ElasticSearch的成本很高&#xff0c;查询效果随着数据量的增加越来越慢。业界已经有很多公司&#xff0c;比如滴滴、B站、Uber、Cloudflare都已经使用ClickHose作为ElasticSearch的替代品&#xff0c;都取得了不错的效果&#xff…

C#教程笔记

C#开发的程序依附.NET平台 编译器->IL中间语言->CLR->机器指令 .NET CORE平台 跨平台 .cs后缀名 快捷键 CtrlKD格式化CtrlL或CtrlX删除一行CtrlY反撤销cwTab快速生成命令行输出Ctrl空格或CtrlJ获取提示///方法注释CtrlMO代码全部折叠CtrlML代码全部展开 上升沿0变1 安…

【AIGC】优化长提示词Prompt:提升ChatGPT输出内容的准确性与实用性

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;长提示词的挑战&#x1f4af;谷歌的优化长提示词技术关键因素分析 &#x1f4af;长提示词的设计原则&#x1f4af;优化长提示词的新框架方法&#x1f4af;实验结果分析不…

Qt第十三天:网络编程:TCP和UDP的使用

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 ❤️TCP&#xff1a; 一、创建项目&#xff0c;命名为Server&#xff0c;继承QWidget 二、添加Qt设计师…

【JavaEE初阶】深入透析文件-IO关于文件内容的操作(四种文件流)

前言 &#x1f31f;&#x1f31f;本期讲解关于CAS的补充和JUC中有用的类&#xff0c;这里涉及到高频面试题哦~~~ &#x1f308;上期博客在这里&#xff1a;【JavaEE初阶】文件-IO之实现文件系统的操作如何进行实现-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&…

Server-Sent Event(SSE) GPT场景实现

关于SSE的基本概念可以看一下阮一峰老师的这篇文章&#xff1a;Server-Sent Events教程。 现在比较常见的场景是gpt回答的时候类似下图这种打字机的情况&#xff0c;因为AI一般响应时间会比较长&#xff0c;使用这种方式能让人别等那么久&#xff0c;是一个相对比较良好的用户…

JVM篇(学习预热 - JVM正式展开 - (实战课程学习总结))(持续更新迭代)

目录 除了了解JVM的一些基本常识&#xff0c;我们并没有提到JVM的架构&#xff0c;就像我们做项目之前的预热&#xff0c;还是有必要先了解好它的架构&#xff0c;让我们开始吧&#xff01; 一、JVM程序执行流程 1. 执行流程图 2. 热点代码 3. 热点检测方式 方法一&#x…

离散数学实验二c语言(输出关系矩阵,输出矩阵性质,输出自反闭包,对称闭包,传递闭包,判断矩阵是否为等价关系,相容关系,偏序关系)

离散数学实验二 一、算法描述&#xff0c;算法思想 &#xff08;一&#xff09;相关数据结构 typedef struct Set *S; //存放集合 struct Set {int size; //集合的元素个数char *A; //存放该集合的元素 }; Set存放有限集合A&#xff0c;该集合的元素个数为size&#xff0…

数据分析方法(回归分析,决策树与神经网络,提升树,时间序列分析,假设检验,用户画像,竞品分析)等

1.回归分析 回归分析是一种统计方法&#xff0c;用于探索自变量&#xff08;预测变量&#xff09;和因变量&#xff08;目标变量&#xff09;之间的关系。它可以帮助预测变量的变化对目标变量的影响大小。例如&#xff0c;简单线性回归用于分析两个变量之间的线性关系&#xf…

能源领域下暖通行业现状-研究

基于AI大语言模型的暖通行业能源管理系统构建研究 一、能源管理中的突出问题 1. **能源消耗监测不准确** 现有的监测系统在获取设备实时能耗数据方面存在精度不足的问题&#xff0c;难以准确反映能源的实际使用情况。这使得节能决策缺乏可靠的数据支持&#xff0c;无法精准定位…

react18中的计算属性及useMemo的性能优化技巧

react18里面的计算属性和使用useMemo来提升组件性能的方法 计算属性 实现效果 代码实现 函数式组件极简洁的实现&#xff0c;就这样 import { useState } from "react"; function FullName() {const [firstName, setFirstName] useState("");const [la…

『 Linux 』HTTP(三)

文章目录 HTTP的请求方法HTTP的状态码模拟404状态重定向状态码状态码与浏览器的联系 TCP的短连接与长连接Connection 头部Content-Type 头部Set-Cookie 头部Session ID 本文代码参照前一篇博客 HTTP的请求方法 HTTP协议存在多种请求方法,但是较为常用的请求方法基本为GET方法与…

开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序:企业产供销全流程的创新驱动

摘要&#xff1a;本文探讨了开源 AI 智能名片、链动 21 模式以及 S2B2C 商城小程序源码在企业产供销过程中的作用。通过分析社交电商与企业产供销的关联、数据运营体系的支撑作用以及小程序功能在企业产供销中的应用等方面&#xff0c;阐述了其在产品研发、传播、营销和公关方面…

2013 lost connection to MySQL server during query

1.问题 使用navicat连接doris&#xff0c;会有这个错误。 2.解决 换低版本的navicat比如navicat11。

Leetcode—192. 统计词频【中等】(Shell)

2024每日刷题&#xff08;188&#xff09; Leetcode—192. 统计词频 实现代码 # Read from the file words.txt and output the word frequency list to stdout. cat words.txt | tr -s \n | sort | uniq -c | sort -nr | awk {print $2, $1}运行结果 之后我会持续更新&…

spring 启动失败 active: @env@

参考&#xff1a;SpringBoot启动失败报错&#xff0c;spring.profiles.active:env中环境变量无法识别报错_active: env_profileactive启动报错 ine 3, column 13:-CSDN博客