本篇体验Visual Studio的10个调试技巧,包括:

1、插入断点和断点管理
2、查看变量信息
3、逐语句F11,逐过程F10,跳出Shift+F11
4、查看堆栈信息
5、设置下一条执行语句
6、调试时修改局部变量并继续调试
7、线程管理
8、为断点设置条件
9、使用命令窗口测试方法
10、变量的历史记录

有这样的一个Person类:

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public bool IsOlderThanOrEqualTo()
        {
            if (Age >= 18)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void PrintAge()
        {
            for (int i = 0; i < Age; i++)
            {
                Console.Write("*");
            }
        }

        public int CalculateDogAge()
        {
            int dogAge = 0;
            dogAge = Age*7;
            return dogAge;
        }

        public void MethodA()
        {
            MethodB();
        }

        public void MethodB()
        {
            MethodC();
        }

        public void MethodC()
        {

        }
    }

客户端调用:

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.Name = "darren";
            p.Age = 22;
            int a = 10;

            //调试方法内
            int result = p.CalculateDogAge();
            Console.WriteLine(result);

            //调试bool类型
            bool olderThan18 = p.IsOlderThanOrEqualTo();
            Console.WriteLine(olderThan18);

            //调试遍历循环
            p.PrintAge();

            p.MethodA();

            Console.ReadKey();
        }

        static int sum(int a, int b)
        {
            return a + b;
        }
    }


1、插入断点和断点管理

→右键代码行
→把鼠标移动到某代码行的任意位置,把鼠标移动到int result = p.CalculateDogAge();
→右键,断点,插入断点


→代码行左侧多了一个红色断点

● 也可通过在代码行的最左侧点击,添加断点。
● 可添加多个断点
● 还可通过:调试→窗口→断点,对断点进行管理

2、查看变量信息

→把鼠标移动到变量名上方
→给代码行打上断点后运行程序,运行程序,停留在断点行
→把鼠标移动到变量p的上方,点击+号可查看变量信息

也可点击菜单栏中:调试→窗口→自动窗口,在"自动窗口"中查看变量的动态信息。

还可点击菜单栏中:调试→窗口→局部变量,在"局部变量"中查看所有变量的动态信息。

还可点击菜单栏中:调试→窗口→监视→监视1,在"监视"中输入变量名并查看该变量的动态信息。

还可以右键变量名,点击"添加到监视"或"快速监视",以查看变量的动态信息。

3、逐语句F11,逐过程F10,跳出Shift+F11

使用逐语句F11调试,当执行某个方法,会跳转到方法内部。
使用逐过程F10调试,当执行某个方法,不会跳转到方法内部。
同时按Shift和F11,会跳转到当前执行方法的上一级中。

4、查看堆栈信息

在调试过程中,还可以查看堆栈信息。

→把断点打在int result = p.CalculateDogAge();代码行
→运行,起初停留在该行
→点击:调试→窗口→调用堆栈
→当没有进入CalculateDogAge方法内部时,调用堆栈窗口中指针指向Main方法

→当按F11使用逐语句调试,进入CalculateDogAge方法内部时,调用堆栈窗口中指针指向Person的实例方法CalculateDogAge

→当按F11使用逐语句调试,跳出CalculateDogAge方法,调用堆栈窗口中指针重新指向Main方法

5、设置下一条执行语句

调试时,左侧的黄色箭头图标表示下一条需要执行的代码行。我们可以通过拖动黄色箭头图标来重新设置应用程序的下一条执行语句。

6、调试时修改局部变量并继续调试

在调试过程中,当希望修改某个变量,但不想停止本次调试,再生成、调试,怎么办?Visual Studio现在允许在调试过程中修改某个变量,并继续调试。

但,此功能不适合64位计算机,如果64位计算机想使用此功能,需要做到:
→右键项目,点击"属性"
→点击"生成"
→在"目标平台"中,选择"x86"

另外,在调试过程中只能修改局部变量,如果想修改类名,方法名之类,需要停止当前调试再修改。

7、线程管理

在调试过程中,点击:调试→窗口→线程,可查看线程的动态信息。

8、为断点设置条件

→ 右键断点,点击"条件",输入如下:

也就是设置,当局部变量a为100时,才进入该断点。

→由于局部变量实际值是10,所有不会进入该断点,最终直接输出了结果。

9、使用命令窗口测试方法

点击:视图→其它窗口→命令窗口,输入如下:

10、变量的历史记录

有时候,希望把某一个变量在循环遍历过程中所有的值都记录下来。

   class Program
    {
        static void Main(string[] args)
        {
            TestMakeObjectId();
        }

        private static void TestMakeObjectId()
        {
            List<string> strs = new List<string>();
            strs.Add("Hello");
            strs.Add("World");
            foreach (string str in strs)
            {
                Console.Write(str + " ");
            }
            Console.ReadKey();
        }
    }


→在Console.Write(str + " ");代码行打上断点,运行。
→把鼠标移动到变量str上,右键,点击"添加监视",得到如下:

→右键监视窗口中变量str所在行,点击"创建对象ID"

得到如下:

→在监视窗口中另起一行,名称是1#,其对应的值自动变为"Hello",即记录下变量str在第一次遍历时的值。

→逐语句F11,str的值变成"World",1#的值不变。于是变量str在整个遍历循环过程中的值都被记录下来。

参考资料:

10+ powerful debugging tricks with Visual Studio

Advanced Debugging in Visual Studio

Visual Studio调试的10个技巧的更多相关文章

  1. Visual Studio 调试系列10 附加到正在运行的进程

    系列目录     [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...

  2. Visual Studio 调试(系列文章)

    调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...

  3. Visual Studio 调试 ---- 系列文章

    调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...

  4. 12个Visual Studio调试效率技巧

    在这篇文章中,我们假定读者了解VS基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到函数内(如果 ...

  5. Visual Studio 调试技巧[Command Window & Immediate Window ](Tips)

    Visual Studio 调试技巧[Command Window & Immediate Window ](Tips) 1. immediate window 定义的一些 alias (// ...

  6. Visual Studio调试之断点技巧篇

    原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我 ...

  7. Visual Studio调试之断点技巧篇补遗

    原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写 ...

  8. Visual Studio 调试系列9 调试器提示和技巧

    系列目录     [已更新最新开发文章,点击查看详细] 01 固定数据提示 如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看. 即使在重新启动后,固定的变量也能 ...

  9. VISUAL STUDIO 调试

    调试术语 Visual Studio调试之断点基础篇 Visual Studio调试之断点进阶篇 不能设置断点的检查步骤 Visual Studio调试之断点技巧篇 Visual Studio调试之断 ...

随机推荐

  1. ASP.NET:插件化机制

    概述 nopCommerce的插件机制的核心是使用BuildManager.AddReferencedAssembly将使用Assembly.Load加载的插件程序集添加到应用程序域的引用中.具体实现 ...

  2. 【LOJ】#2558. 「LNOI2014」LCA

    题解 当年LN还是有专门的省选题的,但是还不如没有 看到这道题,我就想到了一个清晰易懂,简单好写,代码优美的树链剖分线段树套主席树的\(O(q\log^{3}n)\)做法,且就5组数据出题人肯定是不会 ...

  3. Winsock—I/O模型之选择模型(一)

    Winsock中提供了一些I/O模型帮助应用程序以异步方式在一个或多个套接字上管理I/O. 这样的I/O模型有六种:阻塞(blocking)模型,选择(select)模型,WSAAsyncSelect ...

  4. phpstorm 输入法中文不同步 phpstorm 输入法不跟随光标解决办法

    win7系统新安装的phpstorm2017.2版本,试了很多输入法,要么是不显示候选次,要么是输入法候选词总是在屏幕右下角,没有跟随光标移动.百度很久,重要找到解决方案. 就是替换phpstorm安 ...

  5. iconfont 在项目中的简单使用

    font-class引用 font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题. 与unicode使用方式相比,具有如下特点: 兼容性良好,支持 ...

  6. 8-3 4Values Whose Sum is Zero 和为0的四个值

    给定四个n元素集合 ABCD   要求分别从中取一个元素 abcd   使得他们的合为0   问有多少中取法 map果然炸了 #include<bits/stdc++.h> using n ...

  7. Spring 单例 httprequest 线程安全

    @Autowired HttpServletRequest之所以线程安全是因为, httpsevletRequest 储存在 RequestContextHolder中. 每次http请求的doXXX ...

  8. Tensorflow学习:(二)搭建神经网络

    一.神经网络的实现过程 1.准备数据集,提取特征,作为输入喂给神经网络       2.搭建神经网络结构,从输入到输出       3.大量特征数据喂给 NN,迭代优化 NN 参数       4.使 ...

  9. CodeForces 140C New Year Snowmen(堆)

    题面 CodeForces 题解 因为要保证两两不同,所以不能单纯的开堆来维护,堆维护一个二元组,个数为第一关键字,编号为第二关键字,对于一个相同的颜色,统计一下这个颜色的个数再用堆来维护就好了. # ...

  10. JAVAEE——ssm综合练习:CRM系统(包含ssm整合)

    1 CRM项目外观   1. 开发环境 IDE: Eclipse Mars2 Jdk: 1.7 数据库: MySQL 2. 创建数据库 数据库sql文件位置如下图: 创建crm数据库,执行sql 效果 ...