Visual Studio 调试技巧 提高工作效率

写在前面:假定你在日常的工作中使用到了Visual Studio,并期望了解一些调试技巧来提高工作效率,也许本文适合你。以下Visual Studio简称 V。

一、入门

以最简单的控制台应用程序为例,代码如下:

class Program
{
static void Main(string[] args)
{
int result = Sum(2, 3);
        Console.WriteLine("2+3={0}", result);
    }
private static int Sum(int a,int b)
{
return a + b;
    }
}

 

调试的根本目的是跟踪代码、程序的状态,判断是否按照期望的行为运行。常用的跟踪手段有控制台输出、日志输出以及断点调试。

 

1、控制台输出用于开发环境,可以在 vs 输出窗口中查看程序输出的内容如下图所示:

 

Visual Studio 调试技巧 提高工作效率

 

由于是控制台应用程序,Console.WriteLine() 输出的内容不会显示在输出窗口,故采用 Trace.WriteLine() 。对非控制台应用程序,Console.WriteLine() 输出的内容会正常显示在输出窗口。

 

2、日志输出用于开发环境和生产环境,但更多用于生产环境,用来收集程序的运行信息。常用的日志组件有 Log4Net、NLog 以及自定义日志组件。依据问题严重程度大致分为严重错误、错误、警告、信息以及调试信息等几个级别。可结合实际需求灵活配置。

 

3、断点调试多用于开发环境,通过设置断点,让程序在指定的位置暂停,以便观察上下文环境情况。

 

Visual Studio 调试技巧 提高工作效率

 

以上图为例,添加断点后,鼠标移动到变量名上,可以观察一些变量的值。对于复杂类型的变量,通过选中变量,右键选择快速监视的方式。避免鼠标移动后,监视的信息消失。

 

Visual Studio 调试技巧 提高工作效率

 

以上三种调试方法中,对于开发环境而言,使用最为频繁的方法当数断点调试。后面以断点调试为主,深入介绍。

 

二、进阶

 

启动外部程序

 

要使用断点调试,需要满足一些断点调试的条件。对于可执行程序,如控制台应用程序、窗体应用程序、WPF 应用程序以及 Web 应用程序,启动调试后,可以在期望的位置添加断点。而对于如动态库类型,不可以直接启动调试。想要调试这类项目,有两种方式。一种是可以设置项目属性中的启动操作,指定引用该动态库的可执行程序路径。

 

Visual Studio 调试技巧 提高工作效率

 

另一种方式是运行调用了动态库的可执行程序,通过附加可执行程序进程的方式来调试。

 

附加进程

 

Visual Studio 调试技巧 提高工作效率

 

新建 DllDemo 动态库项目,添加 MyMath 类,添加静态方法 Max(int a,int b) 。代码如下:

using System;
namespace DllDemo
{
public class MyMath
    {
public static int Max(int a,int b)
{
return Math.Max(a, b);
        }
    }
}

添加对 DllDemo 动态库项目引用, 并修改控制台应用程序如下。为了方便后续调试,控制台应用程序中添加 Console.Read()。

using DllDemo;
using System;
using System.Diagnostics;
namespace DebugDemo
{
class Program
    {
static void Main(string[] args)
{
            Console.WriteLine("等待键盘输入...");
            Console.Read();
int result = Sum(2, 3);
            Console.WriteLine(string.Format("2+3={0}", result));
            result = MyMath.Max(2, 3);
            Console.WriteLine(string.Format("MyMath.Max(2, 3)={0}", result));
        }
private static int Sum(int a, int b)
{
return a + b;
        }
    }
}

 

运行控制台应用程序 DebugDemo.exe ,附加该进程,在合适的位置添加断点。

 

Visual Studio 调试技巧 提高工作效率

 

查看调用堆栈

 

当程序包含接口继承、抽象类继承等逻辑,导致结构过于复杂,知道功能入口以及出口,想要了解过程时,调用堆栈会比较有用。以下面代码为例:

private static void DoWork()
{
    DoWork1();
}
private static void DoWork1()
{
    DoWork2();
}
private static void DoWork2()
{
    DoWork3();
}
private static void DoWork3()
{
    Console.Write("DoWork3");
}

 

假设知道功能入口为 DoWork,功能结果为 DoWork3,想要了解 DoWork3 的调用逻辑,可以在 DoWork3 中设置断点,启动调试后打开调用堆栈窗口,如下图:

 

Visual Studio 调试技巧 提高工作效率

 

异常设置

 

当程序运行以后,结果不是预期的。初步猜测发生了异常,由于某些原因,捕获了异常,却未妥善处理,导致异常信息被“吞”掉。此时,异常设置会格外有效。以下面代码为例:

private static void TryToDivideByZero()
{
try
    {
int a = 9;
int b = 0;
int c = a / b;
    }
catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

 

由于方法中存在异常,又有异常捕获,后续逻辑会被打断,此时对异常设置做如下设置:

 

Visual Studio 调试技巧 提高工作效率

 

重新调试程序会有如下结果,方便快速定位异常发生点。

 

Visual Studio 调试技巧 提高工作效率

 

三、高级

 

在某些场景下,开发环境运行正常,非开发环境运行异常,依赖常规手段无法定位问题原因,想要断点调试,非开发环境运行缺少 VS 时,远程调试会比较有效。

 

在 VS 安装目录下拷贝远程调试所需的文件夹 x86,x64 到非开发环境

 

Visual Studio 调试技巧 提高工作效率

 

依据远程目标机系统环境,运行 x86/x64 文件夹下 msvsmon.exe,选择工具中的选项菜单做如下配置:

 

Visual Studio 调试技巧 提高工作效率

 

运行待调试程序后,在 VS 中选择调试>附加到进程(ctrl+alt+p),设置连接类型,连接目标(远程 ip 地址或计算机名)后查找,会自动列出相关内容。

 

Visual Studio 调试技巧 提高工作效率

 

在可用进程中选择对应的进程

 

Visual Studio 调试技巧 提高工作效率

 

在合适的位置添加断点即可开始调试了

 

Visual Studio 调试技巧 提高工作效率


转自:LightSmailecnblogs.com/LightSmile/p/11055665.html

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...