assertion failed是什么意思?一招教你快速定位问题!

今天真是有点小郁闷,写代码的时候遇到一个 "assertion failed" 的错误,搞得我头都大。不过还还是给解决,赶紧记录一下,省得以后再踩坑。

我正美滋滋地写着代码,突然程序就崩,弹出一个错误提示框,上面赫然写着 "assertion failed" 。我当时就懵,这是啥玩意儿?

赶紧上网查一下,才知道原来这是“断言失败”的意思。断言嘛你可以理解为程序员在代码里做的“小检查”,用来确保程序在运行的时候,某些条件一定是满足的。如果不满足,程序就会“罢工”,也就是报这个 "assertion failed" 错误。

知道是啥意思,接下来就要找到底是哪里出问题。我仔细看看错误信息,它会告诉你具体是哪一行代码的哪个断言失败。我找到那行代码,发现原来是我写的一个判断条件有问题。

仔细分析

我当时写这段代码的时候,想当然地认为某个变量一定是大于 0 的,所以就写一个断言:

assert(myVariable > 0);

结果,实际运行的时候,这个变量在某种特殊情况下,可能会等于 0,甚至小于 0!这下好,断言失败,程序崩溃。

我的处理办法

找到问题所在就好办。我仔细分析一下代码逻辑,发现这个变量等于 0 也是可以接受的,只是需要做一些额外的处理。于是我把原来的断言改一下:

assert(myVariable >= 0);

然后,在断言后面加一些处理 myVariable 等于 0 的情况的代码。

  • 我先是检查下数据源, 看看是不是数据本身有问题;
  • 又看看我的函数,是不是有什么地方没考虑到各种输入情况。

改完之后,我重新运行一下程序,这下终于没问题,程序跑得顺畅得很!

这回的经历也让我明白一个道理:写代码的时候,一定要考虑周全,不能想特别是对于一些关键的条件,最好加上断言,这样可以及时发现问题,避免程序出现更严重的错误。而且写断言也是一个很好的习惯,可以让你的代码更健壮,更可靠!以后写代码得更仔细点,多做测试,不能再这么马虎!