现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

VC++程序调试(一)

2012-09-13 22:02 工业·编程 ⁄ 共 705字 ⁄ 字号 暂无评论

1 前言

      当程序的运行结果与程序员预想的不一样,如死机,计算值不正确,出现内存访问冲突等,就需要进行调试

2 进行调试前的准备工作

      因为程序调试是一项十分耗时的工作,很难估计出将要花费多长时间,因此在调试前,一定要做好充分准备,尽量避免做无用功:

1.  构造好的测试步骤,让程序出错有规律性或出错的概率越大越好

2. 被调试程序及相关库是最符合要求的版本

3. 工程临时文件如.ncb被删除

4. 整个工程被重新编译

5. 应用程序的链接路经与调试路径保持一致

6. 单体测试全部通过

3 出错位置和原因的确定

3.1 几种典型错误的原因

1 内存莫名其妙的失效

原因:内存指针被多处引用,被多处释放

2 多线程条件下死机

原因:线程中由于用了SendMessage而造成死锁,可人为加入消息循环

3 多线程条件下内存访问冲突

原因:内存被多个线程同时使用,可加入线程同步机制(用消息队列,信号灯等)

4 内存访问冲突

原因:内存越界(如字符串拷贝,内存拷贝)

5 窗口消息的次序问题

原因:如窗口未初始化就开始用

3.2 定位错误的位置

1 对代码的理解越深,对代码出错位置的确定越精确,必要时应画出相关代码的类图和时序图

2 从IDE调用堆栈判断出错位置和原因

3 从Win32 API或MFC类库函数的返回错误码判断出错原因,返回错误码的含义可以从MSDN或源代码中找到,还可以通过VC工具Error lookup找到

4 在代码中加入带编号的TRACE语句或MessageBox(release版),逐步缩小调试范围

5 对于死机现象或偶发现象,可通过逐步注释掉代码的方法确定死机的位置和原因

6 如果死机现象或偶发现象是新出现的,可以通过比较目前版本和上一版本的差异来确定位置和原因

给我留言

留言无头像?