翼度科技»论坛 编程开发 .net 查看内容

第七单元 调试与异常捕捉

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
很多时间,写代码并不能一撸到底,中间都是经历过无数次的调试,才能正常正确的运行起来。就好像一台设备刚买来也需要不断的调试才能达到最佳状态。
DotNet程序的调试,是DotNet程序员必备的技能之一,开发出稳定的程序、解决程序的疑难杂症都需要很强大的调试能力。DotNet调试有很多方法和技巧。
1. 调试

C# 语言中程序调试主要指在 Visual Studio 2022 中调试程序,包括设置断点、监视断点,以及逐语句、逐过程、使用一些辅助窗口来调试程序。 在 Visual Studio 2022 的菜单栏中单击“调试”,菜单项如下图所示。
断点调试(F9)



 
鼠标左键点击最左边的灰色区域,会出现一个小红点,则表示设置断点成功!
在点击这个

 
调试按钮时,程序则会在你打断点的地方挂起,此时,你可以将鼠标放到你需要监视的变量上面动态的查看其变量的值。下图表示程序挂起时的样式:

 
如果你想让程序继续往下执行,则需要点击“逐过程”小图标,或者按F10

 
如果你觉得没必要再调试下去了,则可以点击 “继续” 按钮,则程序会取消挂起遇到直到下一个断点。
取消断点
对着左边的小红点再点一次,则表示取消断点。
条件断点

有些时候,我们只想在程序达到某一条件的时候才想去断点观测程序的变化,则此时可以用到条件断点。例如:在循环体中,只有当i=5时才进行断点调试,对着点击右键:

 
注意:设置好条件后,点击关闭后,左边的断点会变成一个“红十字会”的图标。

 
变量监视

添加监视
对于需要特别关注的变量,可以对着变量右键进行添加监视。如果添加监视之后,在下方会出现一个监视列表,也可以动态的查看你特别需要关注的变量的值

 

 
快速监视(Shift+F9)


即时窗口

即时窗口可以在窗口中随意输入任意表达式,Enter键后会输出结果。与快速监视有点类似。

 
2. 步入调试(F11)

有时候调试的过程中,遇到一个方法,此时,如果你还想进入到方法体中进行调试,可以使用“步入调试(F11)”

 
当程序运行到GetGrade() 方法时,要记得按F11, 如果按F10, 则程序直接往下走了。
3. 异常处理

异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。
异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:trycatchfinallythrow

  • try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
  • catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
  • finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
  • throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
语法
假设一个块将出现异常,一个方法使用 try 和 catch 关键字捕获异常。try/catch 块内的代码为受保护的代码,使用 try/catch 语法如下所示:
  1. try
  2. {
  3.    // 引起异常的语句
  4. }
  5. catch( ExceptionName e1 )
  6. {
  7.    // 错误处理代码
  8. }
  9. catch( ExceptionName e2 )
  10. {
  11.    // 错误处理代码
  12. }
  13. catch( ExceptionName eN )
  14. {
  15.    // 错误处理代码
  16. }
  17. finally
  18. {
  19.    // 要执行的语句
  20. }
复制代码
  
您可以列出多个 catch 语句捕获不同类型的异常,以防 try 块在不同的情况下生成多个异常。
C# 中的异常类

C# 异常是使用类来表示的。C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationExceptionSystem.SystemException 类是派生于 System.Exception 类的异常类。
System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。
System.SystemException 类是所有预定义的系统异常的基类。
下表列出了一些派生自 System.SystemException 类的预定义的异常类:
异常类描述System.IO.IOException处理 I/O 错误。System.IndexOutOfRangeException处理当方法指向超出范围的数组索引时生成的错误。System.ArrayTypeMismatchException处理当数组类型不匹配时生成的错误。System.NullReferenceException处理当依从一个空对象时生成的错误。System.DivideByZeroException处理当除以零时生成的错误。System.InvalidCastException处理在类型转换期间生成的错误。System.OutOfMemoryException处理空闲内存不足生成的错误。System.StackOverflowException处理栈溢出生成的错误。异常处理

C# 以 try 和 catch 块的形式提供了一种结构化的异常处理方案。使用这些块,把核心程序语句与错误处理语句分离开。
这些错误处理块是使用 trycatchfinally 关键字实现的。下面是一个当除以零时抛出异常的实例:
  1. int result =0;
  2. public static void division(int num1, int num2)
  3. {
  4.     try
  5.     {
  6.         result = num1 / num2;
  7.     }
  8.     catch (DivideByZeroException e)
  9.     {
  10.         Console.WriteLine("Exception caught: {0}", e);
  11.     }
  12.     finally
  13.     {
  14.         Console.WriteLine("Result: {0}", result);
  15.     }
  16. }
  17. static void Main(string[] args)
  18. {
  19.     division(25, 0);
  20.     Console.ReadKey();
  21. }
复制代码
 
当上面的代码被编译和执行时,它会产生下列结果:
  1. Exception caught: System.DivideByZeroException: Attempted to divide by zero.
  2. at ...
  3. Result: 0
复制代码
  
抛出对象

如果异常是直接或间接派生自 System.Exception 类,您可以抛出一个对象。您可以在 catch 块中使用 throw 语句来抛出当前的对象,如下所示:
  1. Catch(Exception e)
  2. {
  3.    ...
  4.    throw e
  5. }
复制代码
  
 视频教程:
誉尚学教育_誉尚学教育腾讯课堂官网 (qq.com)
或者:


来源:https://www.cnblogs.com/xuyubing/archive/2023/05/30/17442541.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具