第十章:C语言的调试

简介: 很多小伙伴刚开始听到C语言的调试,这是个啥,表示很怀疑,敲代码不就是直接就是干嘛,结果很多小白们,一运行错误多的数都数不过来。就开始这改改,那删删,莫名奇妙就运行成功了。到最后都不知道到底那错了。有一种小朋友是否有多问号的感觉。可想而知代码调试有多么重要,一个正真的大佬,20%在敲代码,80%在调试代码。咱们不扯别的,直接进入今天的主题--C语言调试。

很多小伙伴刚开始听到C语言的调试,这是个啥,表示很怀疑,敲代码不就是直接就是干嘛,结果很多小白们,一运行错误多的数都数不过来。就开始这改改,那删删,莫名奇妙就运行成功了。到最后都不知道到底那错了。有一种小朋友是否有多问号的感觉。可想而知代码调试有多么重要,一个正真的大佬,20%在敲代码,80%在调试代码。咱们不扯别的,直接进入今天的主题--C语言调试。


f6854764950c49eface109d178fbae48.png


一:bug


7b9d5f30709d441085e2f294ad38b41e.png


屏幕截图 2023-06-19 153035.png


 在 Mark II 计算机上工作时电脑不能正常运作了,霍普和整个团队都搞不清楚为什么。后来才发现,是一只飞蛾意外飞入了一台电脑内部而引起的故障。终于把问题解除了,霍普在日记本中记录下了这一事件。


二:调试的重要性

4c65a398cb184d64b9a98c23439e6f4f.png


①调试的步骤

1.发现程序错误的存

2.以隔离、消除等方式对错误进行定位

3.确定错误产生的原因
4.提出纠正错误的解决办法
5.对程序错误予以改正,重新测试

②Debug和Release的介绍

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。


2d83c97c3e9c40119e8273c40730c7e3.png


三:Windows环境调试介绍

①准备调试(要在Debug环境下才可以调试)

addeb24a349b4ab7a6f7f6cc05243160.png


②学会快捷键

• F5:启动调试,经常用来直接跳到下一个断点处。(在循环中跳到逻辑上的断点)

• F9:创建断点和取消断点。

     断点的重要作用,可以在程序的任意位置设置断点。

     这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

• F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

• F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑

     进入函数内部(这是最常用的)。

• CTRL+F5:开始执行不调试。

③调试的时候查看程序当前的信息

1.查看临时变量的值

0ad42f13098d4b30bacccd52d15b3644.png


2.查看内存信息

6e9891336ce24d27a670c43ff396eb5b.png


3.查看调用堆栈

f64d3b0fe0c44359b40a61259b21af68.png

四:编程常见的错误


1编译型错误

2链接型错误(无法解析的外部命令)

3运行时错误逻移出现问题

五:采用相关代码来减少bug


1.const关键字(const的作用可以避免无意中由于修改数据造成的编程错误。)

2.const修饰指针变量的作用

00cc1f19c688475f92c26eb606199aef.png

3.例子(模拟实现库函数:strcpy)

//模拟实现库函数:strcpy
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char * src)
{
  char* ret = dest;
  assert(dest != NULL);//断言防止空指针
  assert( src != NULL);//断言防止空指针
  //1.第一种写法
  //while (*dest++ = *src++) 
  //  ;
  //2.第二种写法
  while (*src != '\0')
  {
    *dest = *src;
    dest++;
    src++;
  }
  *dest = *src;// \0 的拷贝
  return ret;
}
int main()
{
  //初始化
  char arr1[] = "hello bit"; 
  char arr2[20] = "xxxxxxxxxxxxx";
  char* p = NULL;
  //调用函数
  my_strcpy(arr2, arr1);
  //打印arr2
  printf("%s\n", my_strcpy(arr2, arr1));
  return 0;
}

 不知不觉就到了尾声呢,咱们第十章的知识点就到这里了啦,作为小白的我,可能写的不是很好,不对的地方还请大佬大佬指点指点。

目录
相关文章
|
11月前
|
程序员 C语言
C语言--调试技巧(下)
C语言--调试技巧(下)
|
11月前
|
程序员 C语言 Windows
C语言技巧 ----------调试----------程序员必备技能
C语言技巧 ----------调试----------程序员必备技能
|
1月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
4月前
|
C语言
C语言使用宏定义实现等级调试输出PRINT_LEVEL
C语言使用宏定义实现等级调试输出PRINT_LEVEL
|
3月前
|
存储 编译器 C语言
C语言学习记录——调试技巧(VS2019环境下)
C语言学习记录——调试技巧(VS2019环境下)
42 2
|
3月前
|
程序员 编译器 C语言
C语言中的assert.h:调试助手与断言详解
C语言中的assert.h:调试助手与断言详解
|
4月前
|
程序员 C语言 C++
C语言实用的调试技巧
C语言实用的调试技巧
33 3
|
4月前
|
程序员 编译器 测试技术
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
37 1
|
4月前
|
程序员 C语言 C++
C语言——调试技巧
C语言——调试技巧
|
10月前
|
程序员 C语言
【C语言】如何写出好(易于调试)的代码——assert和const的使用
【C语言】如何写出好(易于调试)的代码——assert和const的使用
36 0