当代码不能正常运行时,可以通过调试定位错误。常用的程序调试操作包括设置断点、开始、中断和停止程序的执行、单步执行程序以及使程序运行到指定的位置。下面将对这几种常用的程序调试操作进行详细地介绍。

1.断点操作

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

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

图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>键执行“跳出”操作。

本文来自明日科技出版的《零基础学C#,转载请注明出处!!!

如何使用Visual Studio调试C#程序的更多相关文章

  1. 【VBS】使用Visual Studio调试VBS程序

    首先要确保机器上安装了Visual Stuido, 然后打开命令行窗口执行如下命令,会弹出是否使用Visual Studio进行调试的确认窗口. 点[是]进行调试. WScript.exe [vbs文 ...

  2. 使用visual studio 调试android 程序 ,真机调试

    1 使用visual studio 2015 新建 blank android APP , 2 安卓手机调整到开发者模式 3 通过USB链接到PC 4 自动检测 设备(这一步貌似没有立即检测到真机设备 ...

  3. visual studio调试exe程序

    标题:How to debug and profile any EXE with Visual Studio 文章:https://devblogs.microsoft.com/visualstudi ...

  4. Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序

    系列目录     [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...

  5. C#比较两个对象是否为同一个对象。 Visual Studio调试器指南---多线程应用程序调试(一)

    两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...

  6. Visual Studio调试之断点进阶篇

    Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中 ...

  7. Visual Studio调试之断点基础篇

    Visual Studio调试之断点基础篇 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F…… 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm ...

  8. 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件

    查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求.   内容 查找符号 (.pdb) 文件 查找源文件   查找符号 (.pdb) 文件 说明 在之前的 Vis ...

  9. 调试 - Visual Studio调试

    Visual Studio - 调试 异常处理机制 windows预定义了一系列的异常错误码,每种程序异常都有一个对应的错误码,windows系统将这些类似键值对关系的数据存储在异常处理表中(称为SE ...

随机推荐

  1. mysql命令整理

    MySQL大小写通用. 一.常见用的mysql指令 1.show databases; #查看当前所有库 2.show tables; #查看所在库中的所有表 3.use 库名; #进入该库 4.sh ...

  2. 我理解的数据结构(一)—— 数组(Array)

    我理解的数据结构(一)-- 数组(Array) 首先,我是一个phper,但是毕竟php是一个脚本语言,如果使用脚本语言去理解数据结构具有一定的局限性.因为脚本语言是不需要编译的,如果你的语法写的不错 ...

  3. Linux - redis-cluster搭建

    目录 Linux - redis-cluster搭建 Linux - redis-cluster搭建 1.准备6个数据库节点,也就是6个redis实例,也就是6个配置文件 配置文件如下 redis-7 ...

  4. 【codeforces 514A】Chewbaсca and Number

    [题目链接]:http://codeforces.com/contest/514/problem/A [题意] 允许你把每个数字翻转 ->x变成9-x 然后问你能够变成的最小的数字是什么; 不能 ...

  5. AIM Tech Round (Div. 2)——ABCD

    http://codeforces.com/contest/624 A.python是用来写div2的AB题的... a, b, x, y = map(float, raw_input().split ...

  6. Java基础之构造方法及其应用

    构造方法是一种特殊的方法,它是一个与类同名且无返回值类型(连void也不能有)的方法. 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化. 当类实例化一个对象时会自动调用构造方法.构造方 ...

  7. SCU Travel

    Travel The country frog lives in has n towns which are conveniently numbered by 1,2,…,n . Among n(n− ...

  8. Windows读取NXP MiFare Ultralight C类型NFC卡片的信息

    1,读取 我们需要外接一个NFC Reader让Windows可以读取NFC卡片的内容. 因为特殊原因,我们选择了Sony rc-s380 NFC Reader.相关介绍 我们需要下载并安装NFC P ...

  9. PHP array_intersect()

    定义和用法 array_intersect() 函数返回两个或多个数组的交集数组. 结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变. 注释:仅有值用于比较. 语法 ...

  10. HDU 4526

    DP. 设状态dp[i][j]表示j辆车后还剩余i个人的花费,枚举一个车的座位k,加上剩下人数i,注意i+k不能超过n,就很容易dp了. #include <iostream> #incl ...