分享
 
 
 

VC程序调试技巧备忘录

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

VC程序调试技巧备忘录

目的:

方便程序的调试,可控制的查看运行信息、运行状态、运行日志,各种错误信息以及尽可能的暴露程序隐藏的错误,并能帮助程序员及时发现错误的原因及错误出处。

调试约定:

1、 我们这里讨论的都是程序在直接运行时的各种运行信息,不讨论Debug模式下的单步运行调试。

2、 我们约定调试者查看信息用2种方式,一种是使用DebugView程序查看运行时信息,一种是使用文件方式查看程序运行日志

3、 我们约定程序员查看正常数据信息,逻辑信息都使用TRACE,由于TRACE在Release模式下无法运行,因此,我编写了方法CRFCWatch::watch,与TRACE完全兼容,但可在R模式下将数据显示到DebugView中。

4、 我们约定对数据的有效性检查使用ASSERT,这里我同样定义了一个新的宏WATCH_ASSERT来兼容ASSERT,当表达式为FALSE时,该宏会做以下工作:D模式下发生错误时,将信息等级,当前文件名,当前行数以及当前表达式输出到DebugView中,并显示ASSERT警告,Release模式下,该宏中的代码依然执行,并在发生错误时,将当前文件名,当前行数以及表达式信息写到DebugView中。

5、 在使用上述的watch方法和WATCH_ASSERT宏时,要求用户输入信息等级,信息等级表示了当前信息的重要性,下表是对等级的分类,目前只定义了偶数级别,奇数级暂时保留,用户可自行安排,同时支持浮点型,比如1.2,4.5,程序内部只是简单的对数值的大小进行判断,大与显示等级值的代码均将被执行,这个数据在程序启动的时候从命令行输入(暂定,也可考虑用文件方式),程序启动后,用户需要使用CRFCWatch::InitWatch方法来获得从外部传入的显示等级,不小与这个等级值的代码将被执行,比如命令行输入的是”test.exe \dv 5”(\d为命令,5为参数值),程序在运行时将执行5-10级的代码。5以下的调试信息将不被显示。

等级

等级描述

10级

最高级,只用于程序的错误,就是那些理论上应该绝对不会错的地方(但是实际上是会出错的^_^),主要是类似ASSERT这样的错误

9级

暂保留

8级

较重要信息,主要是程序的逻辑流程描述信息,比如与服务器连接成功,设备注册成功,提交数据到数据库成功等等

7级

暂保留

6级

主要数据信息,显示重要的数据,比如传送的数据,界面级的数据

5级

暂保留

4级

内部数据,比如协议包数据

3级

暂保留

2级

临时信息

1级

暂保留

6、 对命令行参数的说明:/dv [nLevel==11] [LogFilePath == NULL],比如”\dv 4”,表示只显示不小于等级值为4的信息,而”\dv 1 log.txt ”,则在显示不小于等级值为1的信息的基础上,同时将信息写入到日志文件log.txt中,如果不输入命令行参数,则所有调试信息都将不被显示(当然也不会写文件)。

7、 对逻辑型函数的编写约定:首先我对逻辑型函数说个简单的说明,比如说方法SendDataToDB,看函数名大家知道是什么意思吧,发送某种数据到数据库,一般大多程序员使用void或BOOL作为返回值,这里约定使用CString 作为返回值(暂定),如果正确,返回空字符串,错误时,则返回错误信息描述。

8、 对计算型函数的编写约定:(暂保留)

9、 由于DebugView支持远程调试,所以,使用本DLL的程序也将得到远程调试的支持。具体使用方法请参考DebugView的帮助文件。

10、 强烈建议使用者在使用以上函数或宏的时候,先自己定义一个宏来使用,这样可大大提高程序的可修改性。

设计说明:

设计一个类CRFCWatch如下:

备注:

1、 以下所有的显示都只显示到TRACE窗口和DebugView中

2、 只支持文本形式的文件,不支持2进制的文件,主要功能是描述程序运行的逻辑信息,而非运行时的数据信息

方法

参数说明

返回

功能描述

BOOL InitRFCWatch(float fLevel)

显示数据的等级(1到10之间的数)

初始化显示等级

Void Watch (float fLevel, LPCSTR szText, …)

fLevel:当前信息等级

szText:信息

显示字符串信息以及错误等级在TRACE窗口以及DebugView窗口

Void WatchStr(float fLevel, LPCSTR szText)

fLevel:当前信息等级

szText:信息

显示字符串信息以及错误等级在TRACE窗口以及DebugView窗口

Void WatchInt(float fLevel, int nData)

fLevel:当前信息等级

nData:int型数据信息

显示字符串信息以及错误等级在TRACE窗口以及DebugView窗口

Void WatchFloat(float fLevel, float fData)

fLevel:当前信息等级

fData:float型数据信息(显示4位小数点)

显示字符串信息以及错误等级在TRACE窗口以及DebugView窗口

Void WatchBuf(float nL fLevel, BYTE *pBuf, int nLength)

fLevel:当前信息等级

pBuf:缓冲区指针

nLength:缓冲区长度

显示缓冲区信息(以16进制方式显示)以及错误等级在TRACE窗口以及DebugView窗口,不支持写日志文件

Macro:WATCH_ASSERT(expr)

用户要检验的表达式

Debug模式下发生错误时,将信息等级,当前文件名,当前行数以及当前表达式输出到DebugView中,将信息等级,当前文件全路径,当前行数以及表达式写到Trace中,并显示ASSERT警告,Release模式下,该宏中的代码依然执行,并在发生错误时,将当前文件名,当前行数以及表达式信息写到DebugView中

附:相信这是一个非常使用的工具,希望大家能结合自己的经验多提意见,比如接口方面需要添加哪些,设计方面还有哪些需要完善的,以及您自己的一些调试心得,完成后我会将代码和目标文件发布上来。我的ICQ:172251779(always online),有空的话找我交流

编写人员:m_pDelphi@163.com

2003-3-17

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有