C语言——实用调试技巧——第1篇——(第22篇)

坚持就是胜利

文章目录

  • 一、什么是bug?
  • 二、调试是什么?有多重要?
  • 三、debug 和 release 的介绍?
    • 1、
    • 2、
    • 3、
  • 四、windows环境调试介绍
    • 1、调试环境的准备
    • 2、学会快捷键
      • F5 或者 Fn + F5
        • 条件断点
      • Ctrl + F5
      • F9 或者 Fn + F9
      • F10 或者 Fn + F10
      • F11 或者 Fn + F11
    • 3、调试的时候查看程序当前信息
      • (1)查看临时变量的值
      • (2)查看内存信息
      • (3)查看调用堆栈
      • (4)查看汇编信息
      • (5)查看寄存器信息
    • 4、多多动手,尝试调试,才能有进步


一、什么是bug?

第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。

二、调试是什么?有多重要?

调试的基本步骤:
1、发现程序错误的存在
2、以隔离、消除等方式对错误进行定位
3、确定错误产生的原因
4、提出纠正错误的解决办法
5、对程序错误予以改正,重新测试

三、debug 和 release 的介绍?

1、

Debug 称为 调试版本。它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为 发布版本。它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, 以便用户很好地使用。
在这里插入图片描述
Debug 版本 可以 逐语句调试
在这里插入图片描述
Release 版本 不可以调试,因为Release版本就是用户版本,用户不会调试,自然也不用会调试!
在这里插入图片描述

2、

Debug 版本的内存 大于 Release 版本的内存
在这里插入图片描述

#include <stdio.h>int main()
{char* p = "hello new world";printf("%s\n", p);return 0;
}

上述代码在 Debug 环境的结果显示:39 KB 内存大
在这里插入图片描述
上述代码在 Release 环境的结果显示:9 KB 内存小
在这里插入图片描述

3、

#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;
}
//在上面的代码中,for 循环的终止条件是 i<=12,而数组 arr 的大小是 10。
//因此,当 i 的值增加到10时,循环条件 i <= 12 仍然为真,导致循环继续执行。

Debug 模式 去编译,程序的结果是死循环。
在这里插入图片描述

Release 模式 去编译,程序没有死循环。
在这里插入图片描述

那它们之间有什么区别呢?

就是因为 优化 导致的。

四、windows环境调试介绍

注:linux 开发环境的调试工具是 gdb,后期再好好学习

1、调试环境的准备

在环境中选择 debug 选项,才能使代码正常调试。
在这里插入图片描述

2、学会快捷键

在这里插入图片描述

所有功能都要好好掌握!

F5 或者 Fn + F5

启动调试,经常用来直接跳转到下一个 断点处。
在这里插入图片描述
这个断点:是逻辑上的执行断点,而不是物理上的断点。
在这里插入图片描述

条件断点

在这里插入图片描述
在这里插入图片描述
当 i==5 时,才触发断点。
在这里插入图片描述

Ctrl + F5

开始执行不调试,如果你想让过程直接运行起来而不调试就可以直接使用。

F9 或者 Fn + F9

创建断点和取消断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10 或者 Fn + F10

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

F11 或者 Fn + F11

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)。

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

(1)查看临时变量的值

监视
在这里插入图片描述

局部变量
在这里插入图片描述

自动窗口
在这里插入图片描述

(2)查看内存信息

在这里插入图片描述

在这里插入图片描述

(3)查看调用堆栈

#include <stdio.h>void test2()
{printf("test2\n");
}void test1()
{test2();
}void test()
{test1();
}int main()
{test();return 0;
}

F11 逐语句

以下图片,反映了程序在函数调用时的逻辑。

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上过程,就类型于 栈
在这里插入图片描述

(4)查看汇编信息

在这里插入图片描述

在这里插入图片描述
或者
在这里插入图片描述

(5)查看寄存器信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

1、一定要熟练掌握调试技巧
2、初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。
3、我们所讲的都是一些简单的调试。以后可能会出现很复杂的调试场景:多线程程序的调试等。
4、多多使用快捷键,提升效率。

微软雅黑字体
黑体
3号字
4号字
红色
绿色
蓝色

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/488355.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言读取 ini 配置文件,修改/添加键值对

C语言读取 ini 配置文件&#xff0c;修改/添加键值对 C语言读取 ini 配置文件&#xff0c;对section中的键值对进行修改/添加&#xff0c;如果section不存在&#xff0c;则在末尾将新的section/key/value 添加进去。 一、了解什么是INI文件&#xff1f; ini 文件是Initializ…

unity Aaimation Rigging使用多个约束导致部分约束失去作用

在应用多个约束时&#xff0c;在Hierarchy的顺序可能会影响最终的效果。例如先应用了Aim Constraint&#xff0c;然后再应用Two Bone Constraint&#xff0c;可能会导致Two Bone Constraint受到Aim Constraint的影响而失效。因此&#xff0c;在使用多个约束时&#xff0c;应该仔…

5G网络(接入网+承载网+核心网)

5G网络&#xff08;接入网承载网核心网&#xff09; 一、5G网络全网架构图 这张图分为左右两部分&#xff0c;右边为无线侧网络架构&#xff0c;左边为固定侧网络架构。 无线侧&#xff1a;手机或者集团客户通过基站接入到无线接入网&#xff0c;在接入网侧可以通过RTN或者IP…

【坑】Spring Boot整合MyBatis,一级缓存失效

一、Spring Boot整合MyBatis&#xff0c;一级缓存失效 1.1、概述 MyBatis一级缓存的作用域是同一个SqlSession&#xff0c;在同一个SqlSession中执行两次相同的查询&#xff0c;第一次执行完毕后&#xff0c;Mybatis会将查询到的数据缓存起来&#xff08;缓存到内存中&#xf…

Vue2页面转化为Vue3

vue2element-ui转化为Vue3element plus 后台管理系统&#xff1a;增删查改 vue2页面&#xff1a; <template><div class"app-container"><div><el-form:model"queryParams"ref"queryForm"size"small":inline&qu…

Stable Diffusion 3 震撼发布,采用Sora同源技术,文字终于不乱码了

Stable Diffusion 3 和 Sora 一样采用了 diffusion transformer 架构。 继 OpenAI 的 Sora 连续一周霸屏后&#xff0c;昨晚&#xff0c;生成式 AI 顶级技术公司 Stability AI 也放了一个大招 ——Stable Diffusion 3。该公司表示&#xff0c;这是他们最强大的文生图模型。 与…

2024年 Openai的API相关全部概论汇总(通用版)

2024年 Openai的API相关全部概论汇总&#xff08;通用版&#xff09; 文章目录 2024年 Openai的API相关全部概论汇总&#xff08;通用版&#xff09;一、前言1、python快速开始 二、Openai 平台以及相关项目1、Openai的API管理平台2、ChatGPT项目推荐&#xff08;1&#xff09;…

会声会影2024官方重磅发布更新内径讲解介绍

一、功能特点 会声会影2024作为一款专业的视频编辑软件&#xff0c;继承了之前版本的强大功能&#xff0c;并进行了诸多创新和改进。其主要功能特点包括&#xff1a; 多轨时间轴编辑&#xff1a;支持多轨音视频同时编辑&#xff0c;便于用户精细调整各个元素的时间和位置。丰…

2024年 前端JavaScript入门到精通 第四天 笔记

4.1 函数的基本使用以及封装练习 ★ 函数命名规范 4.2 函数的参数以及默认参数 函数的灵魂&#xff01;&#xff01;&#xff01; 4.3 函数封装数组求和案例 4.4 函数返回值return 4.5 函数返回值细节以及上午总结 4.6 函数返回值案例-求最大值和最 4.7 函数复习以及断点进入函…

【补充】linux内核升级

目录 步骤一&#xff1a;准备内核下载的repo文件 步骤二&#xff1a;yum安装lt长期稳定版 步骤三&#xff1a;查看内核序号&#xff0c;并绑定开机启动选择的序号 步骤四&#xff1a;重启查看 查看当前的内核版本 步骤一&#xff1a;准备内核下载的repo文件 内核升级 cat …

RISC-V知识总结 —— 指令集

资源1: RISC-V China – RISC-V International 资源2: RISC-V International – RISC-V: The Open Standard RISC Instruction Set Architecture 资源3: RV32I, RV64I Instructions — riscv-isa-pages documentation 1. 指令集架构的类型 在讨论RISC-V或任何处理器架构时&…

部署Docker私有镜像仓库Harbor

Harbor介绍 Harbor 是为企业用户设计的开源镜像仓库项目&#xff0c;包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA等企业必需的功能&#xff0c;同时针对中国用户的特点&#xff0c;设计镜像复制和中文支持等功能。 官网&#xff1a;h…