【技巧】vs2019调试

news2025/1/2 4:06:21

文章目录

  • 一.计算机Bug的由来
  • 二.调试
    • 1.调试的定义
    • 2.调试的基本步骤
    • 2.release和debug的区别
    • 3.调试的快捷键
    • 4.其他功能的快捷键
      • 1、窗口快捷键
      • 2、项目功能快捷键**
      • 3、查找相关快捷键
      • 4、代码快捷键
      • 5、编辑快捷键
    • 5.经典例题
    • 6.写代码的好习惯
      • 举例:模拟实现strcpy
    • 7.const的作用
    • 8.编程的常见错误
  • 总结

一.计算机Bug的由来

  计算机术语“bug”最著名的起源故事是这样的:1943年,Hopper在为美国海军工作,当时正处于二战最激烈的时期。而Mark-1计算机体积庞大,出了个小故障,却很难找到。但Hopper最终还是发现了问题所在,因为有一只蛾子卡在了内部结构中。她在笔记本上将这只蛾子做成了标本,并在旁边写了一篇日期为9月9日的文章。根据海军网站的说法,这是第一个找到bug的真实案例,也是bug一词的由来。

在这里插入图片描述
人物:hopper
在这里插入图片描述
  你看到的就一定是真相吗?
 Hopper的论文显示,在蛾子事件发生之前,她和其他人几年来一直在用这个词代指电脑问题。事实上,bug的出现甚至早于Hopper本人。根据《牛津英语词典》显示,它首次出现在一份描述爱迪生的报纸上。1889年,《帕尔迈尔公报》的一位作者写道:“爱迪生先生花了两个晚修理留声机的故障(fixing ‘a bug’),这是一个用来表示解决问题的短语,意思是就好比有只虫子藏在了留声机里,搞出了这些麻烦。”然而,bug一词早在1876年就在爱迪生本人的私人日记和信件中出现过了,远远早于这篇报道前。
 那么爱迪生是怎么想到这个词的呢?《计算机世界》里面指出,这个词可以追溯到一个表示怪物的古老单词。现在仍然存在于一些不常见的单词中,比如bugaboo(令人烦恼或恐惧的东西)。但爱迪生造词的来源倒是字面意思上的虫子。他想象着有些小虫子困在机器的漏洞中。在1878年的一封信中,他写道:“在商业成功或失败前,技术上的漏洞(technical bugs)需要经过数月的观察、研究和劳动才能自我显露出来。毕竟,你在看公寓的时候从来不会注意到蟑螂,只有住进去后,它们才会暴露。”
 那为什么我们一说起bug,最先想到的是Hopper的蛾子事件呢?这还是要归功于Hopper本人。因为在1944年后的几年里,她一遍又一遍的讲述着计算机里有只蛾子的故事,还一度补充道:“自那时起,一旦计算机出了问题,我们就说是有bug。那消除bug就称为debug。

二.调试

1.调试的定义

 编好程序后,用各种手段进行查错和排错的过程 。作为程序的正确性不仅仅表现在正常功能的完成上,更重要的是对意外情况的正确处理。从心理学的角度考虑,开发人员和调试人员不应该是同一个人

2.调试的基本步骤

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

每一次调试都是一次破案过程,按照些许的蛛丝马迹进行寻找,最终找到Bug所在。

2.release和debug的区别

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

3.调试的快捷键

1 . F5: 启动调试
2 .Ctrl+F5: 开始执行(不调试)
3 .Shift+F5: 停止调试
4.Ctrl+Shift+F5: 重启调试
5.F9: 启用/关闭断点
6.Ctrl+F9: 停止断点
7.Ctrl+Shift+F9: 删除全部断点
8.F10: 逐过程
9.Ctrl+F10: 运行到光标处
10.F11: 逐语句

4.其他功能的快捷键

1、窗口快捷键

记忆诀窍:凡跟窗口挂上钩的快捷键必有一个W(Windows); Ctrl+W,W: 浏览器窗口 (浏览橱窗用有道的翻译是window
shopping)

Ctrl+W,S: 解决方案管理器 (Solution)

Ctrl+W,C: 类视图 (Class)

Ctrl+W,E: 错误列表 (Error)

Ctrl+W,O: 输出窗口(输出Output;输出程序的的编译信息
;可在vs中“工具”—-“选项”—-“调试”—-“输出窗口”进行配置需要查看哪些信息)

Ctrl+W,P: 属性窗口 (属性 Property)

Ctrl+W,T: 任务列表 (任务Task)

Ctrl+W,X: 工具箱 (事实上工具应该是Tool 但t已被任务列表占用了
;参照一些大神的记忆方法:“X”长得四通八达,而工具就有这样一个特点,所以属性的快捷键是“X”)

Ctrl+W,B: 书签窗口 (书签 Bookmark 书签非常好用,如果有几千行代码,在寻找代码的时候添加书签找起来要快很多)

Ctrl+W,U: 文档大纲 (OutLine;使用第二个字母U)

Ctrl+D,B: 断点窗口 (breakpoint)

Ctrl+D,I: 即时窗口 (immediately)

2、项目功能快捷键**

规律:ctrl是强制功能键,shift有给项目增加功能。

CTRL + F6 /CTRL + TAB下一个文档窗口即活动窗体切换 (windows操作系统是alt+tab表示在任务之间切换

CTRL + SHIFT + F6 /CTRL + SHIFT + TAB上一个文档窗口 (在windows系统操作中
相信大家都知道shift有相反的功能 哈哈 在这里体现了)

F7: 查看代码 (WebForm开发里面,是查看后台代码)

Shift+F7: 查看窗体设计器 (在后台cs文件的时候,这种方式很方便跳转到前台.aspx页面)

Ctrl+Shift+N: 新建项目 (N是New新建的意思 那如果需要强制在项目中新建项目的话 自然就是组合键Ctrl+Shift+N)

Ctrl+Shift+O: 打开项目 (Open)

CTRL + SHIFT + C显示类视图窗口(C代表Class类的意思)

CTRL + F4关闭文档窗口 (相信用过qq的大家都有使用alt+f4来关闭当前聊天窗口
想想用ctrl+tab在活动标签窗口切换就知道为什么关闭当前标签窗口是ctrl+f4)

CTRL + SHIFT + E显示资源视图 (E代表Explorer资源管理器的意思)

CTRL + SHIFT + B生成解决方案 (B代表Build生成的意思 其实用F6也可以实现)

Shift+F6表示生成当前项目 (上面已经说过使用f6可以生成整个解决方案 那如果是当前项目的生成那自然就是加上功能键shift了 )

F4 显示属性窗口 SHIFT + F4显示项目属性窗口

Ctrl+Shift+S: 全部保存 (S代表Save保存的意思 这里表示全部保存是因为如果只是单个保存Ctrl+S跟整个项目没有任何瓜葛
而全部保存的概念应该是说在整个项目中 所以组合键中自然会有shift了哦)

Ctrl+Shift+A: 新建项(A是Add的意思)

Shift+Alt+C: 新建类
(shift是跟项目有关的功能键;Alt用的非常多,空格(用的非常多)旁;C是Class;而且添加类用的非常多;所以自然就是:Shift+Alt+C)

3、查找相关快捷键

Ctrl+F: 查找 (Find) Ctrl+Shift+F: 在文件中查找 (上面已经提过了shift是表示在项目中
所以如果需要在项目中的文件中查找的话 那自然就少不了Shift) F3: 查找下一个
(相信使用过windows系统的人都知道f3是查找的快捷键) Shift+F3: 查找上一个 (shift在此有反向的功能哦)
Ctrl+H: 替换 Ctrl+Shift+H: 在文件中替换

4、代码快捷键

Ctrl+E,D(ctrl+k,d) —-格式化全部代码 ;让你的代码瞬间整洁起来。

Ctrl+E,F —-格式化选中的代码

Ctrl+K,C: 注释选定内容

Ctrl+K,U: 取消选定注释内容

Ctrl+J /Ctrl+K,L: 智能提示 列出成员 (kernel核心内容 list列表
如果我们想查看一个对象具有的成员具体信息的时候试下这个快捷键吧)

Ctrl+K,P: 参数信息 (kernel核心内容 Parameters参数
如果我们想查看一个方法的具体参数的时候这个组合键可是挺有用的哦)

Ctrl+K,I: 快速查看信息(Infomation)

Ctrl+K,S: 外侧代码(平时个人惯会时不时的用#region 用了region之后代码看起来就特别整洁

CTRL + M, CTRL + M 折叠或展开当前方法

CTRL + M, CTRL + O 折叠所有方法

CTRL + M, CTRL + L展开所有方法 CTRL + M, CTRL + P展开所有方法

Ctrl+M,P: 停止大纲显示 (用了region将代码折叠起来之后试试用这组组合键吧 体验一下折叠和展开的**吧
ctrl+shift+f10:自动添加using命名空间(在实例化对象的时候,使用的非常多)

5、编辑快捷键

Shift+Alt+Enter: 切换全屏编辑

F12: 转到所调用过程或变量的定义

Alt+F12: 查找符号(列出所有查找结果)

shift+f12:查找所有引用(讲光标放在单词上, 然后按Shift + F12)

Ctrl+U: 全部变为小写 (的sql语句全部转换成大写以提高性能 )

Ctrl+Shift+U: 全部变为大写 (U表示Upper )

Ctrl+Shift+V: 剪贴板循环

Ctrl+Shift+L: 删除当前行

Ctrl+E,S: 查看空白(ctrl+r,w 和它一样可以查看空白或者说显示或隐藏tab标记)

Ctrl+E,W: 自动换行

Ctrl+G: 转到指定行 (通过情况下 我们想在跳转到具体某一行 用它太方便了)

Shift+Alt+箭头键: 选择矩形文本 Alt+鼠标左按钮: 选择矩形文本

CTRL + DELETE删除至词尾 CTRL + BACKSPACE删除至词头 SHIFT + TAB取消制表符

Ctrl+左右箭头键:一次可以移动一个单词

Ctrl+单击: 选中当前点击的整个单词

SHIFT + END选择至行尾 SHIFT + HOME选择至行开始处

CTRL + SHIFT + END选择至文档末尾 CTRL + SHIFT + HOME选择至文档末尾开始

CTRL + SHIFT + PAGE UP选择至本页前面 CTRL + SHIFT + PAGE DOWN选择至本页后面

CTRL + PAGE DOWN光标定位到窗口上方 CTRL + PAGE UP光标定位到窗口下方

CTRL + END文档定位到最后 CTRL + HOME文档定位到最前

按两下tab快速**代码段(写for, foreach循环,或者try, 还有绑定事件方法)

ctrl+减号:回退到光标上一次的位置

5.经典例题

#include <stdio.h>

int main()
{	
	int i = 0;
	
	int arr[10] = { 1,2,3,4,5,6,7,8,9 };
	
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("%d", arr[i]);//死循环
	}
	
	return 0;
}

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

6.写代码的好习惯

  1. 使用assert——头文件:asert.h
  2. 尽量使用const
  3. 养成良好的编码风格
  4. 添加必要的注释
  5. 避免编码的陷阱。

举例:模拟实现strcpy

char * strcpy(char * dst, const char * src)
{
	char * cp = dst;
	assert(dst && src);
	while( *cp++ = *src++ )
	{
	   ;
	}
	return( dst );
}

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

7.const的作用

口诀:靠近谁,谁不能动。

int main()
{
	int a = 10;
	int b = 0;
	int* p = &a;
	return 0;
}

在这里插入图片描述

8.编程的常见错误

7.1 编译型错误
直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。
7.2 链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。
7.3 运行时错误
借助调试,逐步定位问题。最难搞。

总结

 调试的技巧需要我们在实际情况,进行一步一步的积累经验,最终我们都将成为大佬,如果觉得文章不错,不妨给个三连奖励一下呗!感谢感谢!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装Ubuntu Linux,配套安装宝塔,安装禅道OK!

安装Deepin完成后 进行root、SSH允许远程登陆配置&#xff0c; 登录root账号&#xff0c;初次登录可按照以下步骤&#xff1a; sudo passwd root //修改root密码 输入密码后。 sudo su 输入密码登录root权限。 登录后进行ssh安装与配置。 sudo apt-get update//这一句是…

【JavaScript】——javascript牛客专项练习错题合集

答&#xff1a; var b function(){alert(this.a); }, obj {a:1,b:b // 把函数独立出来 }; var fun obj.b;// 存储的是内存中的地址 fun(); 虽然fun是obj.b的一个引用&#xff0c;但是实际上&#xff0c;它引用的是b函数本身&#xff0c;因此此时的fun()其实 是一个不带任何…

云原生周刊 | 使用 kube-reqsizer 自动调整资源配额

开源项目推荐 kptop Kubernetes API 提供的监控指标非常有限&#xff0c;而 kubectl top 就是利用 Kubernetes API 来查看 Node 和 Pod 的实时资源使用情况。kptop 使用 Prometheus 作为数据源&#xff0c;不仅可以在终端上显示 Node 和 Pod 的资源使用情况&#xff0c;还可以…

vue中v-if和v-for的区别是什么

v-if和v-for的区别&#xff1a;1、作用不同&#xff0c;v-if指令用于条件性地渲染一块内容&#xff0c;这块内容只会在指令的表达式返回 true值的时候被渲染&#xff1b;而v-for指令基于一个数组来渲染一个列表。2、优先级不同&#xff0c;v-for优先级比v-if高&#xff0c;在进…

基于 Flask 的后台管理系统源码(含数据库文件),基于 Flask 生态,权限,快速开发平台

开 箱 即 用 的 Flask 快 速 开 发 平 台完整代码下载地址&#xff1a;基于 Flask 的后台管理系统源码&#xff08;含数据库文件&#xff09; 项目简介 Pear Admin Flask 基于 Flask 的后台管理系统&#xff0c;拥抱应用广泛的python语言&#xff0c;通过使用本系统&#xff0c…

解决OSPF不规则区域的实验

目录 1.拓扑图 2.实验思路 3.主要配置 4.测试 5.实验总结 1.拓扑图 2.实验思路 实验的总体流程为&#xff0c;先让所有设备与公网可以正常通信。在边界路由器配置缺省指向ISP&#xff0c;并且向内部所有设备下放缺省路由&#xff0c;在边界路由器上配置NAT。想让左边部分…

IPv4与IPv6

IPv4 地址 IPv4地址是一个32位数字&#xff0c;通常使用点号分隔的四个十进制八位字节 (取值范围从0到255)表示。 此类地址分为两个部分: 网络部分和主机部分。位于同一子网中的所有主机可以在彼此之间直接通信&#xff0c;无需路由器&#xff0c; 这些主机具有相同的网络部分…

如何使用 Terraform 构建基于 SmartX 超融合的自服务管理平台

越来越多的运维和开发人员发现&#xff0c;无法实现自动管理的基础设施已成为业务敏捷上线的阻碍。 对于基础架构运维人员来说&#xff0c;日常维护时&#xff0c;创建、回收虚拟机这一类工作的重复性很高。在创建业务虚拟机时&#xff0c;运维人员需要考虑资源放置最佳实践&a…

基于神经网络和遗传算法的飞鹦鹉机器学习

这是一个HTML5项目的源代码&#xff0c;该项目使用神经网络和遗传算法在Flappy Bird视频游戏中实现机器学习算法。该程序教一只小鸟如何以最佳方式拍打&#xff0c;以便尽可能长时间地安全地飞过障碍物。 所有代码都是用HTML5编写的&#xff0c;使用Phaser框架和Synaptic Neu…

ssh 命令

勿以恶小而为之&#xff0c;勿以善小而不为---- 刘备 简单说&#xff0c;SSH是一种网络协议&#xff0c;用于计算机之间的加密登录。 如果一个用户从本地计算机&#xff0c;使用SSH协议登录另一台远程计算机&#xff0c;我们就可以认为&#xff0c;这种登录是安全的&#xff0c…

SpringBoot 自动装配原理,一文掌握!|原创

本文详细讲解了 SpringBoot 自动装配原理&#xff0c;可以直接拉到最后看总结。由于 Spring 源码比较复杂&#xff0c;是需要一些基础的。如果有不懂的地方&#xff0c;欢迎提问&#xff01;点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达…

【C语言】函数详解

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️专栏&#xff1a;✈️C语言快速入门       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d;点…

【Spring【IOC】】——17、@Resource注解和@Inject注解?

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

【算法题解】6.合并两个有序数组

文章目录题目解法一&#xff1a;双指针解题思路图解代码实现复杂度分析解法二&#xff1a;逆向双指针解题思路图解代码实现复杂度分析题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素…

Plaxis软件:Python命令流自动建模与应用

有限单元法在岩土工程问题中应用非常广泛&#xff0c;很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。在使用各大软件进行数值模拟建模的过程中&#xff0c;您是否发现GUI界面中重复性的点击输入工作太繁琐&#xff1f;从而拖慢了设计或方案必选进程&#xff1f;针对…

day30【代码随想录】回溯之分割回文串、复原IP地址、子集

文章目录前言一、分割回文串&#xff08;力扣131&#xff09;二、复原IP地址&#xff08;力扣93&#xff09;三、子集&#xff08;力扣78&#xff09;总结前言 1、分割回文串 2、复原IP地址 3、子集 一、分割回文串&#xff08;力扣131&#xff09; 给你一个字符串 s&#xf…

Win10如何显示文件后缀名?显示后缀名的简单方法

现在大多数用户使用的电脑都是Win10系统&#xff0c;有时我们重装电脑系统&#xff0c;会发现电脑出现一些问题&#xff0c;比如文件后缀名不显示出来。如何显示文件后缀名&#xff1f;方法很简单&#xff0c;跟着下面的详细操作步骤走&#xff0c;轻轻松松Get回消失的文件后缀…

Http和Https和SSL工作原理

相关概念 Http&#xff1a;超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上&#xff0c;是Web协议族中非常重要的一个协议。协议版本包含Http1.0、Http1.1 和Http2.0. Https&…

【3D游戏基础】蒙皮骨骼动画与骨架

效果目标&#xff01;画出蒙皮动画的骨架。视频https://www.bilibili.com/video/BV1pM411m7YwPPThttps://zfxdvouj61.feishu.cn/file/boxcnwgESO6zdQetO7oNhKboNsd以下为PPT文字稿&#xff0c;建议还是看视频讲讲自己对蒙皮骨骼动画的理解&#xff0c;并在 Cocos Creator 3.6 中…

全志Tina Linux MPP (多媒体框架)开发指南支持百问网T113 D1-H哪吒DongshanPI-D1s V853-Pro等开发板

1 简述 整理 MPP sample 使用说明文档的目的是&#xff1a;使 MPP sample 更好用。 2 简介 MPP sample 一般存放在 MPP Middleware 的 sample 目录下。此外&#xff0c;MPP Framework 的 demo 目录下也有一些 sample。 本文档主要介绍 MPP Middleware 各 sample 的基本使用方…