C语言--实用调试技巧

目录

一.调试是什么?

1.1 什么是调试

1.2调试的基本步骤

1.3.Debug和Release

 二.Windows环境下的调试

2.1 调试环境的准备

2.2 调试的快捷键

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

3.3.1 查看临时变量的值

3.3.2 查看内存信息

3.3.3 查看调用堆栈

3.3.4 查看汇编信息

3.3.5 查看寄存器信息


一.调试是什么?

1.1 什么是调试

 编好程序后,用各种手段进行查错和排错的过程

1.2调试的基本步骤
  • 发现程序错误的存在
  • 以隔离、消除等方式对错误进行定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试
1.3.Debug和Release

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

举个例子🌰: 

利用如下代码进行两个数相加

#include<stdio.h>
int  ADD(x, y)
{return x+y;
}
int main()
{int a = 0;int b = 0;printf("请输入您要相加的两个数字(空格隔开):");scanf("%d %d", &a, &b);printf("%d", ADD(a, b));return 0;
}

在VS编译器中,我们可以看到,存在Debug和Release两种方式

 当我们分别在两种模式下进行调试时,会在我们代码存储的地方生成两个文件夹,分别是Debug版本的程序和Release版本的程序

 他们的大小是有差异的,Release版本小于Debug版本

Release版本
Debug版本

 二.Windows环境下的调试

2.1 调试环境的准备

在环境中选择 debug 选项,才能使代码正常调试。

2.2 调试的快捷键

F10(逐过程):存在函数调用,一步到位,默认为一步,直接执行完成

F11(逐语句):存在函数调用,进入函数,观察函数调用过程,更加细致

F9(切换断点):设置一个断点,创建断点和取消断点

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

右击鼠标红色圆点处,可以选择在什么条件下触发断点

F5(开始调试):启动调试,经常用来直接跳到下一个断点处。

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

注:不管用的话,记得加上Fn

3.3 调试的时候查看程序当前信息 
3.3.1 查看临时变量的值

监视窗口,自动窗口和局部变量窗口

自动窗口:根据环境,默认产生一些应当监视的变量放上去

局部变量窗口:监视上下文环境中产生的局部变量 

监视窗口:只需要输入自己想监视的项即可(推荐)

想监视哪个监视哪个(一共有四个监视窗口)

3.3.2 查看内存信息

在调试开始之后,用于观察内存信息。 

3.3.3 查看调用堆栈

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。

3.3.4 查看汇编信息

在调试开始之后,有两种方式转到汇编,看到汇编语句:

法一:右击鼠标

我们可以看到类似如下信息:

法二:菜单上面的调试

3.3.5 查看寄存器信息

可以查看当前运行环境的寄存器的使用信息。

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

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

相关文章

Docker Swarm管理

Docker Swarm群集部署 Docker自诞生以来&#xff0c;其容器特性以及镜像特性给DevOps爱好者带来诸多方便。然而在很长一段时间内&#xff0c;Dock”只能在单机上运行&#xff0c;其跨主机部署、运行与管理能力颇受外界诟病。跨主机能力薄弱&#xff0c;导致Docker容器与主机的…

如何使用yolov5-master进行训练

主要记录配置完成的yolov5-master如何进行自定义数据集训练。 本人使用的设备是jetson-orin AGX&#xff0c;系统是英伟达官方魔改过的ubuntu18.04.。 一、修改配置 首先观察train.py的__main__部分&#xff0c;我们发现训练程序接受很多个参数。 其中我们必须要关注的参数包括…

怎么扫描图片变成pdf格式?分享5个转换技巧,去试试!

怎么扫描图片变成pdf格式&#xff1f;图片和PDF文档已成为我们日常生活和工作中不可或缺的一部分。如果想要将扫描图片转成pdf格式&#xff0c;以便更好地管理和分享&#xff1f; ​ 下面就来给大家分享五种简单的转换方法&#xff0c;快来一起学习下吧&#xff01; 图片转p…

使用docker搭建aria2-pro+ariang并在alist中配置

一、安装aria2-pro 1.创建映射目录 # 配置目录 mkdir -p /usr/local/docker/aria2/config # 下载目录 mkdir -p /share_root/download-aria22.创建容器 docker run -d \--name aria2-pro \--restart unless-stopped \--log-opt max-size1m \--network host \-e PUID$UID \-e …

告别杂音,从 AI 音频降噪开始

生活中&#xff0c;音频无处不在。无论是聆听动人的音乐&#xff0c;还是参与重要的电话会议&#xff0c;又或是沉浸于精彩的网课学习&#xff0c;清晰、纯净的音频质量都至关重要。然而&#xff0c;音频中的噪声却像不速之客&#xff0c;扰乱着这份美好。 音频中的噪声形式多样…

【C++ 面试 - 基础题】每日 3 题(十三)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

排序算法之基数排序

title: 基数排序 date: 2024-7-25 14:29:53 0800 categories: 排序算法 tags:排序算法基数排序 description: 基数排序&#xff08;radix sort&#xff09;的核心思想与计数排序一致&#xff0c;也通过统计个数来实现排序。在此基础上&#xff0c;基数排序利用数字各位之间的递…

Modbus-RTU使用过程中的问题

此程序是在visual studio 2005的MFC程序中执行的&#xff0c;通过引入ModbusRTU.dll进行程序的编程&#xff0c;通过Dependency Walker工具查看ModbusRTU.dll中的静态函数如下&#xff1a; 在ModbusRTU.h文件中 MOD_API WORD RTUReadDiscreteInputs(BYTE nSlaveAddress, WORD …

旅游景区收银系统源代码

一、传统景区急需数字化升级 1.景区经营困境 景区内商户众多&#xff0c;收款方式不统一&#xff0c;收银pos五花八门&#xff0c;不清楚商户的流水情况 景区招商户入驻难&#xff0c;租金不好收取 景区合作的旅行社众多&#xff0c;无法统一管理&#xff0c;佣金高效结算 …

OLAP与OLTP:数据处理系统的两种核心架构

目录 一、什么是OLAP&#xff1f; 二、什么是OLTP&#xff1f; 三、OLAP与OLTP的主要区别 四、结论 在数据管理和分析的领域中&#xff0c;OLAP&#xff08;在线分析处理&#xff09;和OLTP&#xff08;在线事务处理&#xff09;代表了两种重要的数据处理模式。它们在功能、目标…

鸿蒙AI功能开发【卡证识别控件】场景视觉化服务

卡证识别控件 介绍 本示例展示了使用视觉类AI能力中的卡证识别能力。 本示例模拟了在应用里&#xff0c;跳转卡证识别控件&#xff0c;获取到验证结果并展示出来。 需要使用hiai引擎框架卡证识别验证接口kit.VisionKit.d.ts。 效果预览 使用说明&#xff1a; 在手机的主屏…

牛客JS题(四十)字体高亮

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式逆向思路 题干&#xff1a; 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /></head><body><input type"text&…

鸿蒙(API 12 Beta3版)【音视频解封装】 文件解析封装

开发者可以调用本模块的Native API接口&#xff0c;完成音视频解封装&#xff0c;即从比特流数据中取出音频、视频等媒体帧数据。 当前支持的数据输入类型有&#xff1a;远程连接(http协议、HLS协议)和文件描述符(fd)。 支持的解封装格式如下&#xff1a; 媒体格式封装格式码…

MoonBit 周报 Vol.53:新增高级循环语法、引入字符串插值、MoonBit AI 支持代码解释!

weekly 2024-08-05 MoonBit更新 添加了基于 Iter 和 Iter2 类型的 for .. in 循环支持&#xff1a; fn main {for x in [ 1, 2, 3 ] {println(x)}for k, v in { "x": 1, "y": 2 } {println("\{k} > \{v}")} }for 与 in 之间可以使用 1&…

国产的Kimi,很牛逼!

国内大模型现在百花齐放&#xff0c;给大家推荐一下最近我一直在用的大模型工具&#xff1a;kimi kimi很强大&#xff0c;关键还免费&#xff08;这一点太良心了&#xff01;&#xff09; 在 长文本和文件处理 方面&#xff0c;kimi做的非常好。 不仅如此&#xff0c;kimi 里…

html+css网页制作 电商品优购5个页面(无js)

htmlcss网页制作 电商品优购5个页面&#xff08;无js&#xff09; 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xf…

使用Sanic和SSE实现实时股票行情推送

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

电机学习-基础知识

文章目录 1 基本物理概念1.1 左手定则1.2 安培定则1.3 感应电动势 2 电机简单分类2.1 直流有刷电机2.2 步进电机2.2.1 步进电机的驱动原理1.相与线2.极性3.步进电机的驱动 2.3 无刷电机2.3.1 充磁方式2.3.2正弦波电动势与梯型电动势 3 编码器3.1 霍尔编码器3.2 光电编码器3.3 增…

软件设计之MySQL(1)

软件设计之MySQL(1) 此篇应在JavaSE之后进行学习: 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 Navicat可以在软件管家下载 使用navicat连接mysql数据库创建数据库、表、转储sql文件&#xff0c;导入sql数据 学习内容&#xff1a; 数据库概述表、…

NOI Linux 2.0 的安装说明以及使用指南

关于 NOI Linux 2.0 NOI Linux 是 NOI 竞赛委员会基于 Ubuntu 操作系统开发的一款 Linux 桌面发行版&#xff0c;是一套免费的、专门为信息学奥林匹克竞赛选手设计的操作系统&#xff0c;是 NOI 系列赛事指定操作系统&#xff0c;适用于常见笔记本电脑和桌面电脑。 新建虚拟机…