C++ Trace和assert 的使用

[C/C++]TRACE宏调试遇到的错误 在没有调试工具之前,人们调试程序主要是通过在窗口中输出结果来判断程序是否能正常运行。 可以使用TRACE宏,在窗口 TRACR宏只在Debug版本下起作用,在Release版本中由于生成的可执行文件中不包含调试信息,因此TRACR宏不起作用。 阅读详情

C++中TRACE宏的使用

       TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量。

使用非常简单,格式如下:

TRACE("DDDDDDDDDDD");

TRACE("wewe%d",333);
同样还存在TRACE0,TRACE1,TRACE2。。。分别对应0,1,2。。个参数

 

TRACE信息输出到VC IDE环境的输出窗口(该窗口是你编译项目出错提示的那个窗口),

但仅限于你在VC中运行你的DEBUG版本的程序。

 

TRACE信息还可以使用DEBUGVIEW来捕获到。这种情况下,你不能在VC的IDE环境中运行你的程序,而将BUILD好的DEBUG版本的程序单独运行,这个时候可以在DEBUGVIEW的窗口看到DEBUGVIE格式的输出了。

 

VC中TRACE的用法有以下四种:

1.        TRACE  ,就是不带动态参数输出字符串,   类似C的printf("输出字符串"); 

2.        TRACE   中的字符串可以带一个参数输出  , 类似C的printf("...%d",变量);

3.        TRACE   可以带两个参数输出,类似C的printf("...%d...%f",变量1,变量2); 

4.        TRACE   可以带三个参数输出,类似C的printf("...%d,%d,%d",变量1,变量2,变量3);

 

 

TRACE 宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。但有一点不同的是:

TRACE 宏只有在调试状态下才有所输出,而以前用的Printf 函数在任何情况下都有输出。和Printf 函数一样,TRACE函数可以接受多个参数如:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

要注意的是TRACE宏只对Debug 版本的工程产生作用,在Release版本的工程中,TRACE宏将被忽略。

TRACE 宏的利用。。。

TRACE 宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。但有一点不同的是:
TRACE 宏只有在调试状态下才有所输出,而以前用的Printf 函数在任何情况下都有输出。和Printf 函数一样,TRACE函数可以接受多个参数如:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

要注意的是TRACE宏只对Debug 版本的工程产生作用,在Release版本的工程中,TRACE宏将被忽略。

 

 

 

assert()函数的应用

C++ assert()函数的应用方式将会在这篇文章中进行详解,相信对此有兴趣的朋友们应该可以根据我们介绍的内容充分掌握这方面的应用技巧。 


作为一个经验丰富的编程人员来说,对于C++编程语言应该不会陌生的,它的应用可以帮助我们轻松的实现各种功能需求。在这里我们会对C++assert()函数的一些基本应用做一个详细介绍。

 

assert宏的原型定义在< assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:

 

#include < assert.h>   void assert( intexpression ); C++ assert()函数的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

 

请看下面的程序清单badptr.c:

#include < stdio.h>  

#include < assert.h> 

#include < stdlib.h>

 

int main( void ) 

{  

FILE *fp; 

fp =fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件 

 assert( fp ); //所以这里不会出错 

 fclose( fp ); 

 fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败 

 assert( fp ); //所以这里出错 

 fclose( fp ); //程序永远都执行不到这里来  

 return 0;  

 }  

 

 [root@localhost error_process]# gccbadptr.c   [root@localhost error_process]# ./a.out   a.out:badptr.c:14: main: Assertion `fp' failed. 已放弃

使用C++ assert()函数的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include < assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:

#include < stdio.h> 

#define NDEBUG

#include < assert.h>

 


关于C++中的assert,ASSERT,TRACE和VERIFY assert 接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。在的debug版状态下出现。在release版本中不计算传入的表达式。 TRACE 接收跟printf一样的参数。在debug版的调试状态下出现,在debug窗口中输出信息。在release版本中不计算传入的表达式。 ASSERT 它接收一个表达式,如果这个表达式为TR 阅读详情

相关推荐

AMD锐龙笔记本隐藏玩法:分核降压+ PBO2超频全攻略(以5900HX/6900HX为例)

本文详细解析了AMD锐龙笔记本(以5900HX/6900HX为例)的分核降压与PBO2超频技术,帮助用户释放处理器隐藏性能。通过BIOS设置、Curve Optimizer参数调整及稳定性测试,实现性能提升与温度控制的完美平衡,适合硬件爱好者进阶调校。

weixin_30617737的博客 343

C++中TRACE宏的使用

TRACE 宏类似C语言中的Printf函数,用于程序运行过程中,适当输出想要的调试信息。 注意点:TRACE宏只有在调试状态下才有所输出,所以只对Debug 版本的工程产生作用,而在Release 版本的工程中,TRACE宏将被忽略。而Printf 函数则无限制条件,任何情况均可以进行输出。

因为刚好遇见你. 8743

STM32串口接收避坑指南:为什么你的USART_IT_IDLE中断不触发?附完整调试流程

本文深入解析STM32串口接收中断机制,特别是USART_IT_IDLE中断不触发的常见原因及解决方案。通过详细分析中断标志清除顺序、波特率配置、硬件连接等关键因素,并提供完整的调试流程和代码示例,帮助开发者快速定位并解决串口通信问题。

weixin_42519985的博客 347

c++跟踪实例

在实际开发过程中,我们常常通过一个跟踪实例来跟踪我们的代码,以便于不依靠调试器就能发现代码的错误 先来看初始Trace类 class Trace { public: static bool traceIsActive; //标志跟踪是关闭还是启动 Trace(const std::string& name); ~Trace(); void debug(const std::string& msg); private: std::string theFunc.

qq_58665528的博客 962

从mseed到SAC格式转换全攻略:mseed2sac工具安装与批量处理技巧

本文详细介绍了如何将mseed格式的地震数据高效转换为SAC格式,涵盖mseed2sac工具的安装、单文件转换技巧、批量处理自动化实现以及元数据高级处理策略。通过具体命令和脚本示例,帮助地震学研究者快速掌握数据预处理的关键技术,提升波形数据分析效率。

ruby5的博客 927

【网格生成】Gmsh快速入门教程 --1.图形化界面使用

初探 Gmsh软件的主界面如下图所示。通过点击菜单“File” -> "Open"可选择打开已经存在的几何模型或网格文件,初次使用可选择tutorial目录下的t1.geo文件。打开后效果如图所示,t1.geo描述的是一个长方体。 接下来依次尝试左侧菜单栏的功能:Geometry(几何)、Mesh(求解器)。Solver模块需依赖外置求解器,不在本文介绍范围内。 Geometry 该菜单下是与几何相关的功能,如新增一个点/面、体,移动一个体等,具体功能很多可以在后续使用中逐渐尝试学习。本文仅介绍几个

DJ_xiaoming的博客 1万+

C++ 调试输出

","测试",MB_YESNO|MB_ICONWARNING);1、AfxMessageBox()函数在任何类里边都可以使用,而MessageBox()函数只能在CWnd类的继承类中使用。要注意的是TRACE宏只对Debug 版本的工程产生作用,在Release 版本的工程中,TRACE宏将被忽略。2、AfxMessageBox()函数的参数没有MessageBox()函数的参数丰富,所以后者较前者灵活。_RPT1(0, "输出:%d\n", 123);MessageBox("看见了!

nianfen的博客 508

FFTW库安装与使用(3.3.5版本)

FFTW库安装与使用一、FFTW库介绍与下载二、FFTW库安装三、FFTW库测试 一、FFTW库介绍与下载   FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开发。可计算一维或多维实和复数据以及任意规模的DFT,且运行速度比Eigen和opencv自带的FFT库函数快10倍以上。   下载链接:http://www.fftw.org/install/wind

Jhon_ranble的博客 2万+

C++中TRACE宏及assert()函数的使用

C++中TRACE宏的使用     TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量。 使用非常简单,格式如下: TRACE("DDDDDDDDDDD"); TRACE("wewe%d",333)

执着于我的执着 1394

移动支付APP(仿支付宝)

Toast.makeText(PayActivity.this, "支付失败:" + payResponse.getMsg(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败:" + t.getMessage(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

寒寒豆豆软件公司的博客 134

计算机组成原理(第三版)唐朔飞-第九章控制单元的功能-课后习题

计算机组成原理(第三版)唐朔飞-第九章控制单元的功能-课后习题

weixin_45735391的博客 4万+

C++中TRACE宏及assert()函数的使用 .

C++中TRACE宏的使用 TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量。 使用非常简单,格式如下: TRACE("DDDDDDDDDDD"); TRACE("wewe%d",33

huangwei858的专栏 961

红米k60 修复“NV损坏” 去除主板校验电阻步骤解析与图示

红米k60 基带代码:mondrian。搭载‌高通骁龙8+ Gen1处理器.国外版本称:POCO F5 Pro适用于以下型号的小米机型:23013RK75C, 23013PC75G。 💝💝💝通过博文了解 1💝💝💝-----此机型修复NV损坏硬件类操作主板图示 2💝💝💝-----了解设备出现NV损坏的底层逻辑 3💝💝💝 ------具体修改步骤

小马哥的专栏 393

在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()

 游戏制作已经开始采用C++了,却鲜有人选择使用MFC。但笔者觉得的 ASSERT(),VERIFY()和 TRACE()这几个宏很好用。所以就想自己写一个版本来适应Windows平台下不同的工程类型。提醒:ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在 Release 版本的程序中它不起任何作用。VERIFY()和 ASSERT()很

ligangok的专栏 743

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ASSERT VERIFY TRACE assert

#ifdef NDEBUG #define assert(exp) ((void)0) #else #ifdef __cplusplus extern "C" { #endif _CRTIMP void __cdecl _assert(void *, void *, unsigned); #ifdef __cplusplus } #endif

机器视觉之家 984

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

assert,assert_valid,verify,trace用法

assert,assert_valid,verify,trace用法   对于开始学vc的人,对于assert,assert_valid,verify,trace的宏感到很奇怪,总是觉得很难掌握似的,其实这些主要是没有理清楚他们各自宏之间深层次的意义。这些都是我平时的学习笔记,可能有些是网上的资源,如果有重复请大家不要见怪~ ASSERT()     ASSERT()被测试它

xuyongbeijing2008的专栏 487

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Visual C++调试 ASSERT()和TRACE()工具

Visual C++ IDE提供了功能强大的调试器,包括联编(build)工具和调试(debug)工具,Visual C++的调试工具栏如图2-20所示,在调试状态下,其中的某些按钮才会显示。 从左到右,各按钮的含义如表2-3所示。   如果我们发现某个程序中有bug 产生,就可以对其代码部分进行调试,以下罗列出通常采取的步骤。 在可疑的代码处添

Galaxy_Li的专栏 2179

ASSERT与VERIFY宏的区别

1   ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。   2   ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。   断言(assertion)用带断言信

837

MFC中ASSERT()和VERIFY()区别

<br /><br />1   ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。  <br />2   ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。<br /> <br />断言(assertion)用带断言信息(程序, 模块, assertion行)的对话框执行. 对话框

ghhong的专栏 7969
上一篇: 链式线性表C++ 实现
下一篇: fstream 几种打开文件的方式,方便以后用
ToConnection
博客等级 码龄16年 4粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值