assert断言语句指定了程序中的某个点期望为TRUE的条件,若该条件不为TRUE,则断言失败,程序中断,显示断言失败弹框。这是一种很有效的调试与错误诊断方法,可以在程序运行时发现问题,帮助定位错误,使调试更高效,同时断言对代码本身没有影响,因为它是宏而不是函数。
如图弹出的错误框意味着bug即将被发现,可以通过重试按钮,找到代码出错的地方,然后进行排查。
函数走到了断言处,还未开始进行断言。
按下f11运行断言便报出弹框,就可以通过断言中判断的内容确定是什么地方出了问题。
该对话框由assert产生,assert断言,是一个非常好的调试习惯,如检查输入参数的合法性,运行结果的正确性等。
这里给i赋值为10,assert中判断其为11时为真,所以assert报出弹框。
十分常见的断言例如:c函数strcopy中使用到的assert宏
char *strcpy(char *strDest, const char *strSrc) { char *address = strDest; assert((strDest != NULL) && (strSrc != NULL)); while ((*strDest++ = *strSrc++) != '\0') ; return address; }
在strcpy函数中,用assert去检查strdest和strsrc都不能为空,因为任何一个为空,都会导致程序崩溃,加入断言在开发阶段就能发现使用strcpy产生的错误。
assert宏的注意事项:
它只用与发现错误,不能用于纠正错误,只能是做判断,不能做判断以外的任何事。
1、不能再assert宏表达式中使用函数,因为它只在调试版本debug中有用,在发行版本release中无用,其中的函数不会执行,导致可能出现错误。
2、不能出现赋值操作,修改操作,或有副作用的表达式