21 调试我们的C#程序
我们写的C#程序,很多的时候不是能一次就写对的。尤其是在实际的项目中,你经常要做的工作就是不断修改你写的程序,让它正常运行。程序有错误,主要是两种情况。一种是程序报错了,不能正常运行下去。另一种是程序没有报错,但是程序的执行结果不是我们想要的。通常程序员管这些错误叫做bug。怎么能更容易的找到这些程序的错误呢。 Visual Stuido提供了调试的功能让我们可以比较容易的调试程序,更加有效的找到出错的地方。
Visual Studio的主要调试功能包括这些:
1. 输出一些关键点的调试信息。
2. 打断点。当程序运行到断点的时候,程序会停下来
3. 一步步执行程序。
4. 查看运行过程中各个变量的值。
我们接下来一个个的了解和学习一下。
1. 输出一些关键点的调试信息。
你创建一个项目。解决方案名称为Sloution21,项目名称为Exercise21,项目类型为控制台程序。点击Program.cs. 在里边加入这些代码。
我们可以用Debug.WriteLine()来输出我们的调试信息。这个方法和Console.WriteLine()非常相似。Console.WriteLine()是把信息输出到Dos窗口。Debug.WriteLine()是把信息输出到vs的输出调试窗口。
输出窗口在哪里啊?点击视图-》输出。 你会看到输出窗口。在显示输出来源的下拉列表中选择调试。就看到输出调试窗口了。
要使用Debug.WriteLine(),我们首先要在using语句最下边加入一条新的using语句。 见第6行代码。
using System.Diagnostics;
我们用到的Debug.WriteLine()在这个库里边。
我们使用Debug输出了4条信息。
1. 在main函数的开头
2. 在main函数的结尾
3. 第20行输出用户输入的数字
4. 第23行输出经过复杂运算后的结果result的值
运行结果
在调试输出窗口中我们会看到很多输出。但是在中间我们可以找到我们的调试输出。你没有找到啊,那就看我的图吧。
使用Debug.WriteLine()这种方法,可以把我们程序的一些关键节点的信息输出出来,以方便我们调试。而且它不用中断程序执行,所需时间短。
2. 打断点。
有的时候我们希望程序运行到某个语句,停下来。就像小孩子学舞蹈,要把复杂的舞蹈分解成一个个的动作。停下来,我们可以看的更清楚。
打断点很简单。在代码行的左边灰色区域内(这个非常重要,必须是灰色区域内)点击鼠标左键。一个红色的原点出现了。这个红点就是程序的断点。程序运行到这里会停下来。取消断点也非常容易,再在相同的位置点击鼠标左键,红点不见了。断点就取消了。可以同时打多个断点哦。
按F5运行。你会看到程序,运行到断点的地方就停了下来。将鼠标悬停在变量上边,你会看到各个变量的值。
3. 让程序一步步执行
当程序碰到断点的时候,程序就停了下来。接一下来我们可以让程序一步步的执行。
有两种方法。
l 逐语句。
按F11键。程序会逐条语句的执行,遇到调用其他方法,程序会转到被调用的方法中逐条执行。
l 逐过程。
按F10键。程序会把调用的其他方法只是当做一条语句。遇到调用其他方法,程序不会转到被调用的方法中逐条执行。其他和逐语句执行一样。
当在代码中打了多个断点的时候,想让程序直接跳到下一个断点,可以按F5键,让程序继续运行。碰到下一个断点,程序就停了下来。
4. 查看运行过程中各个变量的值.
在打断点的时候我们介绍了一种查看各个变量的值的方法。当然还有很多其他调试过程中查看变量的方法。我也希望大家可以自己试着通过网络查找一下,试着自己学习找到其他查看变量值的方法。有问题可以随时咨询我。
我讲这门课,重点是教大家能开始编程,越快越好。不是穷尽所有的知识点。还有的就是,我会给大家指一些方向,鼓励大家去自己摸索剩余的知识点。在这个过程中掌握学习的方法。教是为了不教。
练习
1. 查找其他可以查看程序运行过程中变量的值的方法。
2. Debug.WriteLine() 将调试结果输出到调试窗口中,和很多其他信息混在一起,不是很方便查看。在网上查一下,如何让我们的调试信息输出到一个干净的窗口中?
3. 试着调试一下以前自己写的代码。打断点,输出一些调试信息,查看程序运行过程中各个变量的值。
4. F10,F11,F5调试的时候,如何运用?亲自尝试几次吧。以后的编程中会经常用到的。
付费解答C#入门学习过程中碰到的各种问题。
零基础学习C#入门,大多数的问题都可以通过自学或借助互联网解决。
但是还是会有一些问题,不是那么容易解决,成为了你学习的绊脚石。最后甚至造成你学习的半途而废。通常学习C#编程入门,你会遇到20到30多个你不能很容易解决的问题。
这个时候,你最需要什么呢?
对!一个专业的老师给你帮助!
你在学习本课程中,遇到任何问题都可以通过qq或email想本教程作者进行求助。
只需30元,你就可以得到本教程作者的三次专业解答。所以你只需不到300元就可以顺利的完成C#入门,从此推开软件行业的大门。
付费方式非常简单:
用微信扫描下面的二维码。在付款留言中留下你的qq号或email地址就可以啦。
教育不是要便宜,而是要可靠!真正聪明的人,更懂得花钱让专业的人为自己服务,提高自己的效率。
老师qq:2040227296
老师email:2040227296@qq.com
21 调试我们的C#程序的更多相关文章
- 调试 Android* x86 应用程序的方法以及要使用的工具
作者:Xiaodong Wang 1.简单介绍 众所周知,Android* 开发者头顶很多称呼:设计员.程序员等,而且一般会不可避免地被称为故障检修工. 代码中的错误无法避免.因此不管您是否一開始就造 ...
- 使用VS Code 从零开始开发并调试.NET Core 应用程序
最新文章:http://www.cnblogs.com/linezero/p/VSCodeNETCore.html 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一 ...
- 利用ASP.NET MVC源代码调试你的应用程序[转]
由于项目需要,最近学起asp.net mvc.昨天遇到ViewData和TempData他们之间的分别这样让我纠结的问题.有园友强烈建议我去看ASP.NET MVC的源代码.所以,我想到如何在调试AS ...
- gdb调试运行时的程序小技巧
使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/bl ...
- VSC调试.NET Core 应用程序
VS Code 从零开始开发并调试.NET Core 应用程序 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一篇 使用VS Code开发 调试.NET Core ...
- VS2017 启动调试出现 无法启动程序“http://localhost:15613” 操作在当前状态中是非法的。 同时附加进程也是错误的解决方法
第一次发表这样的博客,不会如何的排版,还有很多的不懂,大神勿喷哈! 同时是给自己做的一次记录,已方便后面可能会同样出现该问题后不用像无头苍蝇一样到处百度乱找 VS2017 启动调试出现 无法启动程序 ...
- Azure编程笔记(3):用Fiddler调试Azure的应用程序
内容提要 Azure的服务是通过RESTfulAPI提供的. 尽管Azure针对非常多编程语言都提供了SDK.但这些SDK也仅仅是RESTfulAPI的一层封装. 在调用SDK或者RESTful ...
- 编写和调试Android下JNI程序流程
1,切换到Android目录下bin/classes,使用javah命令生成jni所需的头文件,命令类似于:javah com.xxx.ooo,其中,com.xxx为package名称,ooo为包含n ...
- 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2
今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 查官方文档 解决方法 在 PowerShell中运行以下内容, 然后重启服务器 # Enab ...
随机推荐
- <a href="javascript:;"></a>
有时会在网页a标签中看到这样的代码,比如: <a href="javascript:;">反选</a> 这是啥意思呢? 我们知道标签的 href属性用于指定 ...
- Tree Operations 打印出有向图中的环
题目: You are given a binary tree with unique integer values on each node. However, the child pointers ...
- 1451 - Average 高速求平均值
怎样高速求取一段区间的平均值 用前缀的思想来看 很easy 可是 本题题意要求的是 大于等于一段长度的区间的平均值的最大值 并且给出的数据范围非常大 O(n*L)的直白比較算法 用于解决此问题不合适 ...
- SDUT--找朋友(BFS&&DFS)
找朋友 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 X,作为户外运动的忠实爱好者,总是不想呆在家里.如今,他想把死宅Y从家 ...
- HDU 1542 Atlantis (线段树 + 扫描线 + 离散化)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- jmeter获取时间_time 函数
原始时间戳13位精确到毫秒:${__time(,)} 时间戳精确到秒10位:${__time(/1000,)} 时间日期到年月日2019-04-21:${__time(yyyy-MM-dd,)} 时间 ...
- 【bzoj2282】[Sdoi2011]消防
两次bfs可得直径,答案一定不会小于所有点到直径的距离最大值,只要把直径上的边权设为0,任选直径上一点bfs可得将最大值作为二分下界,二分直径左右端点的舍弃部分 #include<algorit ...
- nohup 程序在后台运营 避免 xshell 卡死 通过 nohup.out分析调取系统命令时的异常分析
nohup 程序在后台运营 避免 xshell 卡死 [root@admin1 after_fc_distributed]# nohup /root/anaconda3/bin/python da ...
- 获取特定html源码 富文本编辑器 爬虫生成 dom
python beautifulsoup获取特定html源码 - 吴悟无 - 博客园 https://www.cnblogs.com/vickey-wu/p/6843411.html PyQuery库 ...
- arm-linux交叉编译工具链的制作(基于S3C2440)【转】
本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...