
bug诞生记
文章平均质量分 84
本专栏专注于分析各种bug产生的原因以及解决办法。
breaksoftware
这个作者很懒,什么都没留下…
展开
-
bug诞生记——动态库加载错乱导致程序执行异常
这个案例发生在我研究ROS 2的测试Demo时发生的。整体现象是:修改了源码,编译也成功了,但是执行流程和没修改前一致,新代码的逻辑没有体现。最后定位到“动态库加载错乱”这个根本的问题,方案也就呼之欲出。但是整个排查过程经历了若干假设和推导,还是值得记录下。原创 2024-07-22 00:15:00 · 1038 阅读 · 0 评论 -
bug诞生记——临时变量、栈变量导致的双杀
这是《bug诞生记》的第一篇文章。本来想起个文艺点的名字,比如《Satan(撒旦)来了》,但是最后还是想让这系列的重心放在“bug的产生过程”和“缺失的知识点”上,于是就有了本系列这个稍微中性的名称。(转载请指明出于breaksoftware的csdn博客) 本系列博文的案例将都秉承一个原则——“因知识缺失,而非粗心大意导致”。在实际工作中,粗心大意产生的bug太...原创 2018-09-05 01:41:00 · 860 阅读 · 1 评论 -
bug诞生记——const_cast引发只读数据区域写违例
对于C++这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期。所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界。它是我们的朋友,我们要学会和它相处,而不是改变它。(转载请指明出于breaksoftware的csdn博客) 我们来看一个试图改变这个好朋友的案例class Base {public:...原创 2018-09-11 23:39:13 · 562 阅读 · 0 评论 -
bug诞生记——隐蔽的指针偏移计算导致的数据错乱
C++语言为了兼容C语言,做了很多设计方面的考量。但是有些兼容设计产生了不清晰的认识。本文就将讨论一个因为认知不清晰而导致的bug。(转载请指明出于breaksoftware的csdn博客)class Base {public: Base() = default; void set_v_b(int v_b) { _v_b = v_b; ...原创 2018-09-28 21:20:42 · 735 阅读 · 0 评论 -
bug诞生记——不定长参数隐藏的类型问题
这个bug的诞生源于项目中使用了一个开源C库。由于对该C库API不熟悉,一个不起眼的错误调用,导致一系列诡异的问题。最终经过调试,我们发现发生了内存覆盖问题。为了直达问题根节,我将问题代码简化如下(转载请指明出于breaksoftware的csdn博客)#include <iostream>#include <stdarg.h>enum type...原创 2019-04-25 20:59:06 · 1094 阅读 · 1 评论 -
bug诞生记——信号(signal)处理导致死锁
这个bug源于项目中一个诡异的现象:代码层面没有明显的锁的问题,但是执行时发生了死锁一样的表现。我把业务逻辑简化为:父进程一直维持一个子进程。(转载请指明出于breaksoftware的csdn博客) 首先我们定义一个结构体ProcessGuard,它持有子进程的ID以及保护它的的锁。这样我们在多线程中,可以安全的操作这个结构体。#include <st...原创 2019-09-05 23:35:09 · 2830 阅读 · 1 评论