C/C++教程

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

本文主要是介绍c++代码调试,宏调试,assert报错弹框,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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、不能出现赋值操作,修改操作,或有副作用的表达式

这篇关于c++代码调试,宏调试,assert报错弹框的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!