代码调试与错误处理

程序员的装逼技能:调试,错误处理和快捷键

学计算机3年,只知道一些基础的理论知识,写代码和调试很差,基本不会什么吧!自己花时间了解一下关于这块的东西!以前觉得调试就是代码写出来一运行,有问题了分析那里出问题了,改完能运行就好了;调错的时候真的是很难受,今天我才发现,原来是我自己一直用错方法了!【感悟:重新认识调试】

调试:

这里写图片描述
调试在不同的阶段都有用
【开发】:通过调试检查代码中的错误,并处理掉,保证程序正常运行
【测试】:通过调试的手段测试代码,保证程序从不同的方向验证都能正常通过。
【发布】:通过调试,可以重新创建,检测程序错误
程序在调试时,不仅会运行写好的代码,还会加载程序中的符号信息,这些符号信息在调试的过程中反馈给开发者,使其了解代码发生了什么。

调试分类:【正常模式的调试】【中断模式下的调试】
【正常模式的调试】:也就是程序的正常运行,主要通过输出结果的方式来调试;
          两中输出方式:诊断输出和跟踪点
          诊断输出:1.console.writeLine( )输出到控制台
               2.Debug.WriteLine( )或Trace.WriteLine()输出到OutPut窗口
               3.写入日志文件
          跟踪点:设置跟踪点,通过message输出到Output窗口
output窗口位置
这里写图片描述
在Debug模式下可以运行
Debug.WriteLine()  Trace.WriteLine()
类似
Debug.Write()      Trace.Write()
Debug.WriteLineIf()    Trace.WriteLineIf()
Debug.WriteIf()      Trace.WriteIf()

在Release模式下可以运行,只能运行Trace相关代码,不能执行Debug函数
在调试版本中显示所有额外诊断信息,而发布版没有这个功能,这样能够保证发布程序编译后文件较小,所以不包含!

【中断模式下的调试】:进入中断模式:1.添加断点进入,通过断点进入可以通过多种方式
                  2.产生为处理异常进入
                  3.生成判定语句进入 
                  判定函数 Debug.asset() Trace.assert()
                   触发判定语句,用户会收到通知,把这些消息传递给开发人员
                   
           进入中断后:1.跟踪错误
                 2.通过技巧分析代码
                 
常用技巧也就是【监视变量内容】【单步执行代码】【执行命令的窗口】
这里写图片描述

【监视变量内容】常通过这几个窗口
自动窗口:当前使用变量和前面语句
局部窗口:作用域内变量,在这个里面可以编辑变量的值,有效的绕过前面其他变量的赋值
监视窗口:可定制变量和表达式,监视特定变量或涉及特定变量的表达式,很容易看出那个变量的值发生变化

【单步执行代码】:首先进入中断,执行到中断处
Step Into:,执行每个操作,包括函数中执行
Step Over:移动到下一句,但不进入代码块中,但仍执行代码块
Step Out:跳到代码块尾,执行完该语句后,重新进入中断
使用单步中断执行代码,执行到有错的地方,错误还是会像正常运行那样发生。这个过程中,可以通过监视数据,看看
什么地方出错。

【执行命令的窗口】:即时窗口和命令窗口可以在运行的过程中执行命令
这里写图片描述
命令窗口:可以通过命令手动操作,适用复杂操作
即时窗口:执行源代码,计算简单表达式,修改变量内容
大多数情况多用监视窗口,能够得到同样的效果

例如:

在命令窗口输入immediate切换到即时窗口,即时窗口输入cmd切换到命令串口

【Call Stack】:调用堆栈

10个调试和查错的方法
编程中调试程序的方法
代码测试之代码调试

vs的几种调试方法
VS下如何调试程序

错误处理:

有可能会有错误发生,但不能100%肯定它们不会发生,所以最好能预料错误的发生,编写足够强壮以处理这些错误,而不用中断程序!通过异常处理

第一种
try 
{
    ........
}
finally【必须】
{
    ........
}
第二种
try 
{
    ........产生异常代码
}
catch
{
    ........产生异常时需要执行的代码
}
finally【可选】
{
    ........包含总是会执行的代码;如果没有异常,则在try后执行;有异常,就在catch后执行
}
第三种
try 
{
    ........
}
catch
{
    ........
}
catch
{
    ........
}
finally【可选】
{
    ........
}

执行顺序:

1.try块在异常处中断程序执行
2.【有catch块,查看是否匹配异常类型? 如果匹配就执行,再执行finally块;不匹配检查其他catch块】
3.【没有catch块,执行finally块】


通用的快捷键:

backspace:删除光标左边的内容

delete:删除光标右边的内容
delete:删除到回收站里【选中】
shift+delete:彻底删除【选中】

覆盖光标后的内容:insert

home:光标移到这行开始
end:光标移到这行末尾

Shift+Home :从当前光标所在处,一直选中至当前行首
Shift+End: 从当前光标,一直选中至当前行的行尾

选中到行末:光标在home按shift+end
选中到行始:光标在end:shift+home

pageup向前翻页
pagedown向后翻页

光标在头选中一页:shift+pagedown
光标在尾选中一页:shift+pageup

C#专属快捷键

Ctrl+K+D: 对齐(代码语法错误,就不能使用)
Ctrl+K+C加注释【选中】
Ctrl+k+U去注释【选中】
Ctrl+J:快速智能提示

F1:查看MSDN
F12:转到定义
F5:调试(编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程)
ctrl+shift+B :生成解决方案

猜你喜欢

转载自blog.csdn.net/zhaofen_7/article/details/81591324