【初阶C语言】实用调试技巧(详细介绍)(二)

简介: 【初阶C语言】实用调试技巧(详细介绍)(二)

4. 多多动手,尝试调试,才能有进步


一定要熟练掌握调试技巧。

初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。

我们所讲的都是一些简单的调试。

以后可能会出现很复杂调试场景:多线程程序的调试等。

多多使用快捷键,提升效率。


5. 一些调试的实例


5.1 实例一

实现代码:求 1!+2!+3! …+ n! ;不考虑溢出。

int main()
{
  int i = 0;
  int sum = 0;//保存最终结果
  int n = 0;
  int ret = 1;//保存n的阶乘
  scanf("%d", &n);  //举一个1到3的阶乘,1到3,1!+2!+3!=1 + 2 + 6 =9但编译器结果为15
  for (i = 1; i <= n; i++)
  {
  int j = 0;
  for (j = 1; j <= i; j++)
  {
    ret *= j;
  }
  sum += ret;
  }
  printf("%d\n", sum);
  return 0;
}


举一个1到3的阶乘,1到3,1!+2!+3!=1 + 2 + 6 =9但编译器结果为15

这时候我们如果3,期待输出9,但实际输出的是15。


why?

这里我们就得找我们问题。


首先推测问题出现的原因。初步确定问题可能的原因最好。

实际上手调试很有必要。

调试的时候我们心里有数

int main()
{
  int i = 0;
  int sum = 0;//保存最终结果
  int n = 0;
  int ret = 1;//保存n的阶乘
  scanf("%d", &n); 
  for (i = 1; i <= n; i++)
  {
  int j = 0;
  ret = 1;//经过调试,这样改就对了
  for (j = 1; j <= i; j++)
  {
    ret *= j;
  }
  sum += ret;
  }
  printf("%d\n", sum);
  return 0;
}


5.2 实例二

#include <stdio.h>
int main()
{
  int i = 0;
  int arr[10] = { 0 };
  for (i = 0; i <= 12; i++)
  {
  arr[i] = 0;
  printf("hehe\n");
  }
  return 0;
}


研究程序死循环的原因

原理:


i 和 arr 是局部变量,局部变量是放在栈区上的。

栈区内存的使用习惯是,先使用高地址处的空间,再使用低地址处的空间,再使用低地址处的空间。

数组随着下标的增长,地址是由低到高变化的。


注意:

该代码的运行结果是跟环境有关的。

相关文章
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
53 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
53 2
|
7月前
|
C语言
C语言初阶:如何判断是否为素数并且输出
C语言初阶:如何判断是否为素数并且输出
53 0
|
3月前
|
C语言
C语言调试
C语言调试
24 0
|
5月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
6月前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下
|
6月前
|
存储 C语言
【C语言初阶】指针篇—上
【C语言初阶】指针篇—上
|
7月前
|
安全 编译器 程序员
【C语言】:VS实用调试技巧和举例详解
【C语言】:VS实用调试技巧和举例详解
63 1
|
7月前
|
存储 编译器 C语言
C语言学习记录——调试技巧(VS2019环境下)
C语言学习记录——调试技巧(VS2019环境下)
69 2
|
7月前
|
C语言
【初始C语言8】详细讲解初阶结构体的知识
【初始C语言8】详细讲解初阶结构体的知识