计算机术语“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.以隔离、消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的解决办法
5.对程序错误予以改正,重新测试
每一次调试都是一次破案过程,按照些许的蛛丝马迹进行寻找,最终找到Bug所在。
Debug版本:通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release版本:称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用,不能进行调试。
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: 逐语句
记忆诀窍:凡跟窗口挂上钩的快捷键必有一个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)
规律: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)
Ctrl+F: 查找 (Find) Ctrl+Shift+F: 在文件中查找 (上面已经提过了shift是表示在项目中
所以如果需要在项目中的文件中查找的话 那自然就少不了Shift) F3: 查找下一个
(相信使用过windows系统的人都知道f3是查找的快捷键) Shift+F3: 查找上一个 (shift在此有反向的功能哦)
Ctrl+H: 替换 Ctrl+Shift+H: 在文件中替换
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命名空间(在实例化对象的时候,使用的非常多)
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+减号:回退到光标上一次的位置
#include
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;
}
char * strcpy(char * dst, const char * src)
{
char * cp = dst;
assert(dst && src);
while( *cp++ = *src++ )
{
;
}
return( dst );
}
口诀:靠近谁,谁不能动。
int main()
{
int a = 10;
int b = 0;
int* p = &a;
return 0;
}
7.1 编译型错误
直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。
7.2 链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。
7.3 运行时错误
借助调试,逐步定位问题。最难搞。
调试的技巧需要我们在实际情况,进行一步一步的积累经验,最终我们都将成为大佬,如果觉得文章不错,不妨给个三连奖励一下呗!感谢感谢!