当前位置: 首页 > news >正文

5.1 程序调试

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

本节中为了演示方便,使用的代码如下:

【例 5.1【项目:code5-001】程序的调试。

        static void Main(string[] args)

        {

            int[] a = new int[100]; ;

            int s = 0;

 

            for (int i = 0; i < 100; i++)

                a[i] = i;

            for (int i = 0; i < 100; i++)

                s += a[i];

            Debug.Print("Print "+ s.ToString());

            Debug.WriteLine("WriteLine " + s.ToString());

            Console.WriteLine(s.ToString());

            Console.ReadKey();

        }

在C#中调试程序主要有以下方法:

1、中断

中断调试时可以方便地跟踪数据值,增加中断位置(即断点)可以在需要跟踪调试的语句处按下F9键,或者在需要中断的语句左侧用鼠标左键点击一下,此时会出现棕红色圆圈,并且代码也变成棕红色背景。例如在

a[i] = i;

这一句增加中断:

图5-1 设置断点

添加断点时,请注意鼠标点击位置。

删除断点,可以再次按下F9键,或者在棕红色圆圈上点击一下鼠标左键,此时不再显示棕红色圆圈,所在代码行背景也变回白色,就表示取消了断点。

增加或删除断点不仅仅是在编辑时有效,程序运行时也是可以操作的。

按下F5键运行时,程序将切换回C#编辑器下,在设置的断点处中断,此时,断点行的背景色为黄色,同时不可修改代码:

图5-2 程序在断点中断

此时把鼠标放到变量上,就可以很直观的看到变量的值:

图5-3 中断时查看变量值

这是第一次进入for循环,所以i的值为0。由于断点位置在循环语句内,i从0到99,所以整个运行过程将会中断100次。

然后,按下工具栏上的“逐语句”按钮(快捷键F11),程序将会执行到下一句

i++

处,当然,按下F5,程序会继续中断到

a[i] = i;

处,此时i的值也变为1。

变量即使是数组、结构、类,它的值都可以立即获得:

图5-4 查看数组变量的值

注意:关于快捷键的设置,可以点击菜单【工具】|【选项】,从弹出的【选项】窗口中,从左侧找到并点击【环境】|【键盘】进入快捷键设置:其它快捷键可以从“显示命令包含”项中找到需要修改快捷键的命令,然后进行更改:

图5-5 更改快捷键

2、添加监视

当程序进入中断的时候,还可以添加变量的监视。

例如,要监视s的值,鼠标右键点击s(点在左右旁边也无所谓),弹出菜单上选择“添加监视”即可:

图5-6 添加对变量的监视

此时,变量s出现在监视窗口中:

图5-7 监视窗口

为了更能说明监视的s,笔者同时增加了对i的监视,可以看到当i=7时,s=21。注意i=7时,a[7]=7,由于此时中断,还没有计算s+=a[7],所以s=0+1+2+3+4+5+6,而不是s=0+1+2+3+4+5+6+7。

图5-8 监视变量的值随程序运行而更改

3、Debug输出

在代码中使用了Debug.Print和Debug.WriteLine来实时地输出变量的值,方便查看和调试。这两个方法的用法差不多。都是将变量的值输出到【即时窗口】中:

图5-9 Debug输出变量的值

4、Console输出

在窗体编程时,也可以用Console.WriteLine方法实时地输出变量的值,功能和Debug差不多。不同的是,Console.WriteLine输出的结果是显示在【输出】窗口中。如果是控制台应用程序开发下,Console.WriteLine只会输出到控制台显示。

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

 

相关文章:

  • 什么是双机热备系统?双机热备现在是否已经过时了?
  • 职坐标C语言数据结构算法核心精讲
  • Deep research深度研究:ChatGPT/ Gemini/ Perplexity/ Grok哪家最强?(实测对比分析)
  • 内容中台的实施基石是什么?
  • vue2双向绑定解析
  • 单片机设计暖脚器研究
  • 投资晚报 3.12
  • 【论文笔记】FLARE:feed-forward+posegeometry estimate+GS
  • 调优案例一:堆空间扩容提升吞吐量实战记录
  • 适合二次开发的Web组态软件推荐
  • 子母钟系统,京准电子科技助力高考精准计时
  • 机器学习常见激活函数
  • Vitis IDE 艰难切换--从传统 Vitis GUI 到 2024.1 统一软件界面
  • NetAssist 5.0.14网络助手基础使用及自动应答使用方案
  • 【学习笔记】《逆向工程核心原理》03.abex‘crackme-2、函数的调用约定、视频讲座-Tut.ReverseMe1
  • ESP8266-调试
  • 代理(Delegate)、闭包(Closure)、Notification(通知中心) 和 swift_event_bus适用场景和工作方式
  • vue3实现虚拟滚动Vue-Virtual-Scroller
  • docker2
  • 2.angular指令
  • 张建华评《俄国和法国》|埃莲娜·唐科斯的俄法关系史研究
  • 女冰队长于柏巍,拒绝被年龄定义
  • 人民日报评论员:焕发风雨无阻、奋勇前行的精气神
  • 光明日报社论:用你我的匠心,托举起繁盛的中国
  • 海南机场拟超23亿元收购美兰空港控股权,进一步聚焦机场主业
  • 最高法强化涉新就业形态民事案件审判指导:推动出台司法解释