c++代码调试,宏调试,assert报错弹框

调试宏assert:报错弹框,终止,重试,还是忽略?重试。

assert断言语句指定了程序中的某个点期望为TRUE的条件,若该条件不为TRUE,则断言失败,程序中断,显示断言失败弹框。这是一种很有效的调试与错误诊断方法,可以在程序运行时发现问题,帮助定位错误,使调试更高效,同时断言对代码本身没有影响,因为它是宏而不是函数。

如图弹出的错误框意味着bug即将被发现,可以通过重试按钮,找到代码出错的地方,然后进行排查。
c++代码调试,宏调试,assert报错弹框
c++代码调试,宏调试,assert报错弹框
函数走到了断言处,还未开始进行断言。
c++代码调试,宏调试,assert报错弹框
按下f11运行断言便报出弹框,就可以通过断言中判断的内容确定是什么地方出了问题。

该对话框由assert产生,assert断言,是一个非常好的调试习惯,如检查输入参数的合法性,运行结果的正确性等。
c++代码调试,宏调试,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、不能出现赋值操作,修改操作,或有副作用的表达式

上一篇:mysql分表实战


下一篇:【为给定字符串提出数字】看到群里面试分享一个面试题 结果给定回复是不严谨的故记录一下