第七单元 调试与异常捕捉

这篇具有很好参考价值的文章主要介绍了第七单元 调试与异常捕捉。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

很多时间,写代码并不能一撸到底,中间都是经历过无数次的调试,才能正常正确的运行起来。就好像一台设备刚买来也需要不断的调试才能达到最佳状态。

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 语法如下所示:

try
{
   // 引起异常的语句
}
catch( ExceptionName e1 )
{
   // 错误处理代码
}
catch( ExceptionName e2 )
{
   // 错误处理代码
}
catch( ExceptionName eN )
{
   // 错误处理代码
}
finally
{
   // 要执行的语句
}

  

您可以列出多个 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 关键字实现的。下面是一个当除以零时抛出异常的实例:

int result =0;

public static void division(int num1, int num2)
{
    try
    {
        result = num1 / num2;
    }
    catch (DivideByZeroException e)
    {
        Console.WriteLine("Exception caught: {0}", e);
    }
    finally
    {
        Console.WriteLine("Result: {0}", result);
    }

}
static void Main(string[] args)
{
    division(25, 0);
    Console.ReadKey();
}

 

当上面的代码被编译和执行时,它会产生下列结果:

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

  

抛出对象

如果异常是直接或间接派生自 System.Exception 类,您可以抛出一个对象。您可以在 catch 块中使用 throw 语句来抛出当前的对象,如下所示:

Catch(Exception e)
{
   ...
   throw e
}

  

 

视频教程:

C#入门到精通 - 网易云课堂 (163.com)文章来源地址https://www.toymoban.com/news/detail-464265.html

到了这里,关于第七单元 调试与异常捕捉的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java全局捕捉异常并返回统一返回值

    1. 首先定义全局异常处理类 2. 当全局有接口返回已经定义的全局捕捉的异常,就会调用上面的接口统一返回信息 3. 统一返回错误页面 Error.html 当前端访问/getJobList接口时如果微服务的其他模块还未启动IllegalStateException异常就会被拦截从而重定向到Error页面,并输出错误信息:

    2024年02月12日
    浏览(43)
  • LSTM时间序列预测MATLAB代码模板(无需调试)

    多序列:http://t.csdn.cn/yfjoh 数据在评论区,导入自己的数据即可预测并画图 上面代码中对应的function函数: shujuchuli.m yuceweilai.m def_options.m   运行结果:    

    2024年02月13日
    浏览(35)
  • Activiti7流程结束监听事件中,抛出的异常无法被spring全局异常捕捉

    activiti7中,提供了 ProcessRuntimeEventListener 监听器,用于监听流程实例的结束事件 上述代码中,由于1/0会抛出运行时异常,理论上来说应该被我们的全局异常所捕获 实际情况是无法捕获 既然异常没有被一层一层的抛出去直到被全局异常捕获,那说明调用 ProcessCompleteListener.onE

    2024年02月06日
    浏览(44)
  • 我的创作纪念日——一年的时间可以改变很多

    不知不觉来到CSDN已经创作一年了。打心底讲,对于在CSDN开始坚持创作的原因,我用一句话来概括最合适不过了——“无心插柳柳成荫” 为什么这么说呢? 这要从我的一篇博客说起——《输入命令Javac报错详解》: 那也是我第一次接触到Java这门语言,想必大家在最开始学习

    2023年04月08日
    浏览(42)
  • 第七单元 条件查询,分组查询

    条件查询是通过where子句进行检索的查询方式。   1. 如何使用排序(升序,降序)? asc :表示升序(默认排序方式) desc :降序 排序语法:select ... from 表名 [条件] order by 要排序的字段 asc/desc     2. 多字段如何排序? 语法: select ... from 表名 [条件] order by 第一要排序的字段 a

    2024年02月05日
    浏览(45)
  • 融合transformer和对抗学习的多变量时间序列异常检测算法TranAD论文和代码解读...

    今天的文章来自VLDB TranAD: Deep Transformer Networks for Anomaly Detection in Multivariate Time Series Data 论文链接:https://arxiv.org/pdf/2201.07284v6.pdf 代码地址:https://github.com/imperial-qore/TranAD 在文章中提出了对于多变量异常检测的几个有挑战性的问题 缺乏异常的label 大数据量 在现实应用中需要尽

    2023年04月09日
    浏览(90)
  • 【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 文献来

    2024年02月07日
    浏览(62)
  • 时间序列预测实战(二十五)PyTorch实现Seq2Seq进行多元和单元预测(附代码+数据集+完整解析)

    本文给大家带来的时间序列模型是Seq2Seq,这个概念相信大家都不陌生了,网上的讲解已经满天飞了,但是本文给大家带来的是我在Seq2Seq思想上开发的一个模型和新的架构,架构前面的文章已经说过很多次了,其是专门为新手开发的,而且为了方便大家使用只定义了一个文件

    2024年02月04日
    浏览(46)
  • AI写的代码比“手工代码”安全性差很多

    类似Github Copilot这样的人工智能代码助手能大大提高开发人员的开发效率和生产力,并降低开发技术门槛(不熟悉语言或概念的程序员的进入)。然而,缺乏经验的开发人员可能会轻易相信人工智能助手的输出内容,从而引入安全漏洞风险。 类似Github Copilot这样的人工智能代

    2024年02月21日
    浏览(40)
  • html制作网页案例代码----(故宫博物馆9页)特效很多

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | 等网站的设计与制作 | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包