VC中用于调试程序的宏
来源:互联网 发布:淘宝怎么解绑手机号 编辑:程序博客网 时间:2024/04/28 23:41
ASSERT()
ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在 Release 版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在 Release 版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏 VERIFY(),以保证表达式中的函数调用在 Release 版本中会被正确求值。
断言(assertion)用带断言信息(程序, 模块, assertion行)的对话框执行. 对话框有3个按钮: "Break", "Repeat" ("Debug"), and "Continue" ("Ignore"). "Break" 结束程序, "Continue" 忽略断言, 最有用的是"Repeat"按钮. 按下它在断言的地方打开源代码编辑器. 在这里你可以测试所有的变量值并明白哪里出了问题。
例如:ASSERT(pPointer);ASSERT(n>0 && n<100);ASSERT(0);
ASSERT在执行简单验证时很有用,但对于C++对象,特别是由CObject派生的对象,则有更好的方法ASSERT_VALID来实现类似操作。作为一般规则,我们应在开始使用每一个对象之前检查数据讹误,
ASSERT_VALID宏使得对CObject的派生类实现该操作非常简单。
例如:ASSERT_VALID(this);ASSERT_VALID(pView);
VERIFY()
VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效(译者注:原作者在这里没有讲清楚,VERIFY()不会打印说明,只是会对参数表达式求值)。
TRACE()
TRACE()基本上就是函数 printf()的一个复制品,唯一的区别是它把结果输出到调试窗口。在 Release 版本中,它也是无效的。一般是用TRACE0(),TRACE1(),TRACE2()…而不用TRACE()。
这三个宏在 Release 版本中都不会产生任何实质性的影响,它们是否起作用取决于是否定义了预定义了宏 _DEBUG。这是对 Microsoft Visual C++ 而言,在其它的编译器中可能其它不同的宏。
常用用法:
为了控制传进的指针:
void SomeFun(SomeType* pPointer)
{
ASSERT(pPointer);
//some instructions.
}
你可以在"switch" 和 "if"操作中捕获奇怪的值
例如:
例如:
switch(nRGBColors){
case nRed: {//some instructions.} break;
case nGreen: {//some instructions.} break;
case nBlue: {//some instructions.} break;
default: ASSERT(0); // we should have never come here!
}
case nRed: {//some instructions.} break;
case nGreen: {//some instructions.} break;
case nBlue: {//some instructions.} break;
default: ASSERT(0); // we should have never come here!
}
if(nWaterTemp >=0 && nWaterTemp < 50){
//some instructions.
}
else if(nWaterTemp >= 50 && nWaterTemp <= 100){
//some instructions.
}
else{
ASSERT(0); // we should have never come here!
}
//some instructions.
}
else if(nWaterTemp >= 50 && nWaterTemp <= 100){
//some instructions.
}
else{
ASSERT(0); // we should have never come here!
}
对值的断言:
ASSERT(nSomeValue >= MinValue and nSomeValue <= MaxValue);
ASSERT(nOtherValue != 0);
ASSERT(nSomeValue >= MinValue and nSomeValue <= MaxValue);
ASSERT(nOtherValue != 0);
可爱的 ASSERT 错误
ASSERT( m_MyWnd.Create() );
ASSERT( m_MyWnd.Create() );
呕! 这是一个可怕的错误! 程序在调试版中正常工作, 在发行版中不工作. 记住: 这是一个在发行版中将被移除的宏. 以这种方法你的窗口将永远不会被创建. 如果你用 MFC, 这样做:
VERIFY( m_MyWnd.Create() );
它在调试版中像ASSERT一样并且在发行版中执行m_MyWnd.Create()。
- VC中用于调试程序的宏
- VC中用于调试程序的宏
- VC中用于调试程序的宏
- VC中用于调试程序的几个宏的使用技巧
- VC中用于调试程序的几个宏的使用技巧
- VC中用于调试程序的几个宏的使用技巧
- VC中用于调试程序的几个宏的使用技巧
- VC中用于调试程序的几个宏的使用技巧
- VC中用于调试程序的几个宏的使用技巧
- VC中用于调试程序的几个宏的使用技巧
- vc中用于调试的宏(ASSERT,VERIFY,TRACE) (转载)
- Visal C++ 中用于调试程序的几个宏
- VC DLL程序的调试
- VC中用来做调试的输出函数TRACE
- VC++中用加载一个程序
- VC中用到的相关 宏
- Android中用gdb调试一启动就崩溃的程序
- 细谈VC程序调试的若干方法
- 变
- 学习犹太人的创业赚钱法则
- log4j源码简要分析 | 读取配置文件
- 小试WDM驱动开发
- asp.net,access数据库连接实例
- VC中用于调试程序的宏
- 利用libpcap分析网络上的数据包(入门级)
- Tomcat开发技术之与HTTP服务器的集成
- Web框架选型思考
- 欢迎大家和我探讨TTCN3方面以及各种智能网电信网协议方面的知识。
- 2006-9-4工作报告(By cat)
- TTCN-3语言
- 2006-9-4工作报告--ubuntu + python(by qshpeng)
- 调试Flex2动态加载的项目