C#中利用断点操作调试程序的步骤详解

Visual Studio调试器调试

我们大家都知道,当代码不能正常运行时,可以通过调试定位错误。常用的程序调试操作包括设置断点、开始、中断和停止程序的执行、单步执行程序以及使程序运行到指定的位置。下面将对这几种常用的程序调试操作进行详细地介绍。话不多说了,来一起看看详细的介绍吧。

1.断点操作

断点通知调试器,使应用程序在某点上(暂停执行)或某情况发生时中断。发生中断时,称程序和调试器处于中断模式。进入中断模式并不会终止或结束程序的执行,所有元素(如函数、变量和对象)都保留在内存中。执行可以在任何时候继续。

插入断点有3种方式:在要设置断点的代码行旁边的灰色空白中单击;右键单击要设置断点的代码行,在弹出的快捷菜单中选择“断点”→“插入断点”命令,如图11.4所示;单击要设置断点的代码行,选择菜单中的“调试”→“切换断点(G)”命令,如图11.5所示。

图11.4 右键快捷菜单插入断点

图11.5 菜单栏插入断点

插入断点后,就会在设置断点的行旁边的灰色空白处出现一个红色圆点,并且该行代码也呈高亮显示,如图11.6所示。

图11.6 插入断点后效果图

删除断点主要有3种方式,分别如下:

(1)可以单击设置了断点的代码行左侧的红色圆点。

(2)在设置了断点的代码行左侧的红色圆点上单击鼠标右键,在弹出的快捷菜单中选择“删除断点”命令,如图11.7所示。

图11.7 右键快捷菜单删除断点

(3)在设置了断点的代码行上单击鼠标右键,在弹出的快捷菜单中选择“断点”/“删除断点”命令

2.开始执行

开始执行是最基本的调试功能之一,从“调试”菜单(如图11.8所示)中选择“开始调试”菜单,或在源代码窗口中右键单击可执行代码中的某行,从弹出的快捷菜单中选择“运行到光标处”菜单,如图11.9所示。

图11.8 选择“启动调试”菜单

图11.9 选择“运行到光标处”菜单

除了使用上述的方法开始执行外,还可以直接单击工具栏中的按钮,启动调试,如图11.10所示。

图11.10 工具栏中的启动调试按钮

如果选择“启动调试”菜单,则应用程序启动并一直运行到断点,此时断点处的代码以黄色底色显示,如图11.11所示。可以在任何时刻中断执行,以查看值(将鼠标移动到相应的变量或者对象上,即可查看其具体值,如图11.12所示)、修改变量或观察程序状态。

图11.11 运行到断点

图11.12 查看变量的值

如果选择“运行到光标处”命令,则应用程序启动并一直运行到断点或光标位置,具体要看是断点在前还是光标在前,可以在源代码窗口中设置光标位置。如果光标在断点的前面,则代码首先运行到光标处,如图11.13所示。

图11.13 运行到光标处

3.中断执行

当执行到达一个断点或发生异常时,调试器将中断程序的执行。选择“调试”→“全部中断”菜单后,调试器将停止所有在调试器下运行的程序的执行。程序并没有退出,可以随时恢复执行,此时应用程序处于中断模式。“调试”菜单中“全部中断”菜单如图11.14所示。

图11.14 “调试”→“全部中断”菜单

除了通过选择“调试”→“全部中断”命令中断执行外,也可以单击工具栏中的按钮中断执行,如图11.15所示。

图11.15 工具栏中的中断执行按钮

4.停止执行

停止执行意味着终止正在调试的进程并结束调试会话,可以通过选择菜单中的“调试”→“停止调试”命令来结束运行和调试。也可以选择工具栏中的按钮停止执行。

5.单步执行和逐过程执行

通过单步执行,调试器每次只执行一行代码,单步执行主要是通过逐语句、逐过程和跳出这3种命令实现的。“逐语句”和“逐过程”的主要区别是当某一行包含函数调用时,“逐语句”仅执行调用本身,然后在函数内的第一个代码行处停止。而“逐过程”执行整个函数,之后在函数外的第一行代码处停止。如果位于函数调用的内部并想返回到调用函数时,应使用“跳出”,“跳出”将一直执行代码,直到函数返回,然后在调用函数中的返回点处中断。

当启动调试后,可以单击工具栏中的按钮执行“逐语句”操作,单击按钮执行“逐过程”操作,单击按钮执行“跳出”操作,如图11.16所示。

图11.16 单步执行的3种命令

说明:除了在工具栏中单击这3个按钮外,还可以通过快捷键执行这3种操作,启动调试后,按下<F11>键执行“逐语句”操作、<F10>键执行“逐过程”操作、<Shift+F10>键执行“跳出”操作。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • C#动态加载组件后如何在开发环境中调试详解

    动态加载组件 那就是简单的Assembly.Load动态加载dll而以.这网上资料也有不少.基本的思路基本上就是在本地上一个指定目录如[plugs]存在着一堆dll文件.主程序在初始运行时一般会把指定目录下的dll一次性用Assembly.Load加载进来.只要把指定目录变成从网络加载,或者加载指定目录前先检查网络上的是否有新版本.这就简单做成个最简单版本的热更新. 多数网上的资料就是然后就没有然后了.很多人就发现产品是通过动态加载组件了.但开发人员根本无法调试啊.不能调试就意味着开发难度大啊.

  • C# 中的动态创建组件(属性及事件)的实现思路及方法

    通常在写程序的时候,当要用到某些组件,采用的方法一般都是动态创建,用完以后就释放掉.Visual   C#在程序运行的时候也可以动态创建组件,下面就结合一个程序例子来具体介绍如何用Visual   C#动态生成组件.首先让我们了解一下,在动态创建组件的过程中要用到的一些概论和理论. 一.   Boxing   (装箱)和Unboxing   (出箱): 在用Visual   C#动态创建组件的时候,要涉及到二种数据类型变量的转换,这二种类型变量就是实值类型(Value   Type)变量和参考类

  • C#中一些你可能没用过的调试窗口的方法

    首先说明:如果没有进入调试模式的话,默认的调试窗口如下: 开始前的准备: 新建控制台程序DebugWindowDemo: 修改Program.cs 的代码为: 复制代码 代码如下: using System;using System.Threading;using System.Threading.Tasks;using System.Diagnostics; class S    {       public static void Main()        {            pco

  • C#实现自定义定时组件的方法

    本文实例展示的是一个自定义的定时器组件,有别于.NET Framework里面提供的几个Timer.首先说说该组件开发背景,发现现在手头上的工作离不开定时,定时做一个任务,什么都是定时去做什么什么,隔某段时间干某件事情,都离不开"定时"这个词.众所周知这个要用到多线程,在多篇关于多线程的文章里面有提过做一些周期性的操作时最好用Timer,当然这个Timer肯定是Threading.Timer,并不是WinForm控件里面的Timer.但我觉得在我的应用中Timer不够满足需求. 1.T

  • C# 动态编译、动态执行、动态调试

    在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件的自动加载和手工加载等功能. 如上图,我封装的类CSharpProvider很简单,下面说明一下一些公共成员的用法. 公共属性 AssemblyFileName:这个属性指定动态编译后生成的配件名称. CompilerParameters:这个属性指定编译的参数 References:这个属性指定被编译代码中的引用.调用者只要调用References.Add("x

  • C#使用Windows Service的简单教程(创建、安装、卸载、调试)

    前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务.本文就向大家介绍如何运用C#来创建.安装.卸载.调试Windows Service程序. 一.创建Windows服

  • C# Web应用调试开启外部访问步骤解析

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 设置内网访问 设置外网访问 1. 设置内网访问 在设置之前,本机环境如下: 操作系统:win7 IDE:Visual Studio 2010 应用:ASP.net 想要实现局域网内其他机器访问本机web应用包含以下4步: 第一步:设置启动方式为IIS Express Visual Studio 运行Web应用时,默认采用自身的

  • C#中利用断点操作调试程序的步骤详解

    Visual Studio调试器调试 我们大家都知道,当代码不能正常运行时,可以通过调试定位错误.常用的程序调试操作包括设置断点.开始.中断和停止程序的执行.单步执行程序以及使程序运行到指定的位置.下面将对这几种常用的程序调试操作进行详细地介绍.话不多说了,来一起看看详细的介绍吧. 1.断点操作 断点通知调试器,使应用程序在某点上(暂停执行)或某情况发生时中断.发生中断时,称程序和调试器处于中断模式.进入中断模式并不会终止或结束程序的执行,所有元素(如函数.变量和对象)都保留在内存中.执行可以在

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • Java利用Selenium操作浏览器的示例详解

    目录 简介 设置元素等待 显式等待 隐式等待 强制等待 总结 简介 本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素等待,等待元素加载完,再操作. 设置元素等待 很多页面都使用 ajax 技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性.webdriver 中的等待分为 显式等待 和 隐式等待. 显式等待 显式等待:设置一个超时时间,每个一段时间就去检

  • 在Spring Boot应用程序中使用Apache Kafka的方法步骤详解

    第1步:生成我们的项目: Spring Initializr来生成我们的项目.我们的项目将提供Spring MVC / Web支持和Apache Kafka支持. 第2步:发布/读取Kafka主题中的消息: <b>public</b> <b>class</b> User { <b>private</b> String name; <b>private</b> <b>int</b> age

  • Python中的字符串操作和编码Unicode详解

    本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧. 字符串类型 str:Unicode字符串.采用''或者r''构造的字符串均为str,单引号可以用双引号或者三引号来代替.无论用哪种方式进行制定,在Python内部存储时没有区别. bytes:二进制字符串.由于jpg等其他格式的文件不能用str进行显示,所以才用bytes来表示,bytes的每个字节为一个0-255的数字.如果打印的时候,Python会把能够用ASCI

  • 利用go-zero在Go中快速实现JWT认证的步骤详解

    关于JWT是什么,大家可以看看官网,一句话介绍下:是可以实现服务器无状态的鉴权认证方案,也是目前最流行的跨域认证解决方案. 要实现JWT认证,我们需要分成如下两个步骤 客户端获取JWT token. 服务器对客户端带来的JWT token认证. 1. 客户端获取JWT Token 我们定义一个协议供客户端调用获取JWT token,我们新建一个目录jwt然后在目录中执行 goctl api -o jwt.api,将生成的jwt.api改成如下: type JwtTokenRequest stru

  • Hibernate中实现增删改查的步骤详解

    1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法, 可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务. 2.什么是ORM  Object-Relational-Mapping对象关系映射 ORM:是通过java对象映射到数据库表,通过操作Java对象可以完成对数据表的操作.(假如你用的是Dbutils那么还需要在Java类中写sq

  • laravel5.4利用163邮箱发送邮件的步骤详解

    前言 其实发送邮箱其实不难,不如说挺简单的,本文将详细介绍关于laravel5.4用163邮箱发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.首先还是现在163注册一个账号并且设置如下图 授权码很重要的,请好好记住,待会在laravel的.env中要配置到的-- 二.如果以上你都做完了,那接下来就是配置.env了 MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=465 MAIL_USERNAME=你的账

  • Mac中mongoDB的安装与卸载步骤详解

    前言 MongoDB 是一个基于分布式文件存储的数据库,旨在为 web 应用提供可扩展的高性能数据存储解决方案.本文主要介绍的是关于在mac中安装卸载mongoDB数据库的方法,更多关于mongoDB的使用大家可以参考这篇文章:http://www.jb51.net/article/79416.htm (一) mongodb 安装 mongodb 数据库的安装有两种方法. 一种是使用命令行安装,第二种是使用HomeBrew 安装,我按照第二种方式安装. 1.更新Homebrew的package数

  • python程序中的线程操作 concurrent模块使用详解

    一.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor:进程池,提供异步调用 ProcessPoolExecutor 和 ThreadPoolExecutor:两者都实现相同的接口,该接口由抽象Executor类定义. 二.基本方法 submit(fn, *args, **kwargs) :异步提交任务 map(func, *iterables,

随机推荐