C语言学习笔记之程序调试

13.1什么是调试

调试:调试可以让代码一步一步的慢慢执行,我们可以跟踪程序的运行过程,可以让程序停在某个地方,查看当前所有变量的值(全局变量存在全局数据区、局部变量存在栈区)货内存中的数据。也可以步进执行或执行几个语句观察程序具体的执行情况。
作用:监控变量的值、函数的调用过程、内存中的数据、线程调度等程序细节。
注:变量的定义和初始化、内存的分配和释放。

13.2断点

断点的含义:
调试器遇到断点时会把程序暂时挂起,让程序进入中断状态,这种状态下的操作不会终止程序的执行,也不会清除与程序相关的元素,比如变量、函数等,它们在内存中的位置不会发生变化。处于中断状态下的程序允许用户查看和修改它的运行状态。

13.3查看和修改变量的值

局部变量的监视
变量的监视

#include<stdio.h>
int main() {
	int value_int, array_int[3];
	float value_float;
	char *value_char_pointer;
	//input bp1;
	value_int = 19;
	value_float = 2.0;
	value_char_pointer = "hello,world";
	array_int[0] = 17, array_int[1] = 18;
	//input bp2
	return 0;
}

13.4单步调试

单步调试:让代码一步一步执行
逐语句:可以进入函数内部
逐过程:将函数作为一个整体看待

修改代码运行位置(程序易崩溃):设置断点、移动箭头

13.5即时窗口的使用

即时窗口不能定义新的变量

调用函数:没有执行成功???

13.6查看、修改运行时的内存

不同类型名对应的变量类型

13.7条件断点的设置

条件断点

13.8assert断言函数

assert断言函数是C语言标准库提供的assert.h函数 它的使用与操作系统无关

注:fopen函数
fopen函数支持的模式

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)

int main() {
	FILE *s;
	
	s = fopen("d:\\deldel.txt", "r");
	if (s==NULL)
	{
		printf("open fail\n");
		exit(1);
	}
	else
	{
		printf("open success\n");
	}
	fclose(s);
	return 0;
}

assert函数:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#pragma warning(disable:4996)
int main() {
	FILE *s;
	s = fopen("d:\\deldeldel.txt","w+");
	assert(s);

	fclose(s);
	s = fopen("d:\\hahaha.txt","r");
	assert(s);
	
	printf("success");
	fclose(s);
	return 0;

}
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#pragma warning(disable:4996)
int main() {
	FILE *s;
	s = fopen("d:\\deldeldel.txt","w+");
	assert(s);

	fclose(s);
	s = fopen("d:\\hahaha.txt","w");
	assert(s);
	
	printf("success");
	fclose(s);
	return 0;

}

注:每次断言只能检验一个条件,这样才能利用assert函数对问题进行定位
注:自增和自减运算符的优先级高于算术运算符

注:assert函数在实际开发中如何使用???
AssertFatal函数的作用是什么???

13.9输出调试信息

合理利用调试信息捕捉工具
已经封装好的就不要自己写了,弄懂就行,关注核心代码的实现即可,加快开发效率。

13.10调试的总结

调试标记:

#include<stdio.h>
#define DEBUG
int main() {
#ifdef DEBUG
	printf("prepare for debug...\n");
#endif // DEBUG
	printf("prepare for running...\n");
	return 0;
}

调试过程;
即时窗口-断点/条件断点=逐语句/逐过程-带有逻辑的调试
注:粗心是最大的bug,要结合开源项目多加训练。

#include<stdio.h>
#include<stdlib.h>
#define PAUSE system("pause");
//#define DEBUG
#define PI 6.14
#if (defined DEBUG)
#define _DEBUGNEW
#define _put1(NUM) printf("%d\n",NUM)
#define _put2(NUM) printf("%f\n",NUM)
#else
#define _put1(NUM) printf("%d\n",NUM+NUM)
#define _put2(NUM) printf("%f\n",NUM+NUM)
#endif // define DEBUG


int main() {
#ifdef _DEBUGNEW
	printf("prepare for debug\n");
#endif // DEBUG
	
	printf("prepare for running\n");
	_put1(1);
	_put2(PI);
	PAUSE;

	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
 原名《Turbo C/C++ for Windows 集成实验与学习环境》,现在已支持最新操作系统WINDOWS 7,它是从事一线教学的大学教师根据C程序多媒体教学演示和C语言初学者的特点,量身打造的一个简单易用的C/C++程序设计教学演示、学习与实验软件(支持TC2/TC3、GCC、VC6四种编译器,没有日期限制,与软件配套的《C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利用户 记录教程中的重点、难点、学习心得体会,针对用户学习教程中遇到的问题开通了疑难问题解答论坛等,同时,为了便于C语言学习,加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、 Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、2004年到2009年全部二级 C 语言的真题笔试试卷及答案与分析和上机模拟试题和详尽的答案与分析等大量的学习资源。另外 “编程日记” 功能可以让你记录你的 C 语言学习历程, “资料管理” 功能让你大量的下载资料不再难找   安装注意事项:为了保证软件的正常运行,请不要安装在中文文件夹中,采用默认安装路径即可。
原名《Turbo C/C++ for Windows 集成实验与学习环境》,现在已全面支持最新操作系统VISTA,它是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单易用的 C/C++程序设计学习与实验软件(支持TC2/TC3、GCC、VC6四种编译器,没有使用日期限制)。与软件配套的《 C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利用户 记录教程中的重点、难点、学习心得体会,针对用户学习教程中遇到的问题开通了疑难问题解答论坛等,同时,为了便于C语言学习,加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、 Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、二级 C 语言的真题笔试试卷及答案与分析和上机模拟试题和详尽的答案与分析等大量的学习资源。另外 “编程日记” 功能可以让你记录你的 C 语言学习历程, “资料管理” 功能让你大量的下载资料不再难找。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值