简介
开发人员面临的最大问题之一是生产问题何时发生。开发人员必须快速找到问题的根本原因,或者在开发环境中复制相同的问题来解决问题。由于时间是至关重要的,在这方面,迟迟得不到根本原因可能导致客户的金钱损失或导致公司的声誉损失。有效地解决生产问题和缩短周转时间的方法很少。
调试问题的方法
- 检查调用堆栈的日志
- 启用跟踪并检查跟踪输出
- 在开发环境中复制场景并使用Visual Studio进行调试
- 使用程序数据库(PDB)文件
- 远程调试
检查调用堆栈的日志
这是调试问题的最常见方法,即获取用户日志文件并检查其中的异常。如果异常是已知的并用自定义消息处理,那么它是有用的,但是如果异常是未处理的,那么很难找出异常是如何发生的。调用堆栈在这种方法中很有用,但调用堆栈仍然提供方法级信息。方法级信息不显示是哪一行导致了问题。为了获得准确的行信息,我们需要使用程序数据库(PDB)文件和应用程序。PDB将在下面详细介绍。日志的另一个缺点是我们不能在应用程序中进行大量的日志记录,特别是如果日志是在输出文件中写入的。这会大大降低应用程序的性能。因此,应根据需要限制日志记录。
启用跟踪并检查跟踪输出
可以通过配置启用跟踪,并且可以重新运行应用程序以检查跟踪输出。如果trace被禁用,程序将忽略trace语句。因此,可以在代码中使用跟踪开关使用跟踪语句。但是这种方法仍然有局限性,因为它需要为每一个逻辑代码编写,而这些代码的维护有点繁琐。
在开发环境中复制场景并使用Visual Studio进行调试
由于通常的做法是只在客户机上部署程序集(编译的代码)和框架,因此很明显,客户机将没有用于调试的应用程序代码或Visual Studio IDE/Debugger。所以为了找到根本原因,开发人员需要用类似的场景设置开发环境,并在开发人员的机器上调试它。
这是找到问题根源的最可靠的方法,但它有严重的局限性。
- 开发环境和生产环境中的数据不能相同,因此与数据相关的问题很难重新创建。
- 这是一项耗费时间的任务,而且根据应用程序工作所涉及的多个系统,在开发过程中查看复制问题的关键性可能很难设置。
使用程序数据库(PDB)文件
这是在客户机上调试问题的最简单方法。但是什么是PDB文件?我们通常在编译应用程序时在编译文件夹中看到它们。程序可以在没有它们存在的情况下运行。因此,堆栈跟踪可以更加丰富。当我们将PDB文件与EXE/DLL一起包含,然后复制场景时,当前堆栈跟踪还将提供发生错误的行号。这有助于我们了解错误发生的确切位置,然后对其进行修正或提供修正。让我们举一个例子来说明PDB文件的使用。
PDB文件是特定于DLL/EXE的生成文件。它们包含链接到相应DLL/EXE的GUID。因此,即使代码没有更改,一个生成的PDB文件也不能与另一个生成的DLL/EXE一起使用。因此,一旦创建了一个内置发布模式,就需要将PDB存储在某个存储库(即“Symbol Server”)中。向PDB提供版本构建是可选的。但是提供它并没有太大的威胁,因为您的程序集和EXE已经包含了您的源代码。要反向工程您的可执行文件是可能的,可能类似的努力也可以放在PDB文件。因此,总的来说,除非您的安装包是特定于大小的,否则不会有太多问题,因为pdb文件可能会占用大量空间。
远程调试
PDB文件是开始调试的好方法,但如果您可以连接到客户端的计算机,则可以从计算机调试应用程序。远程调试很容易实现。您只需执行以下操作:
您需要在客户机上设置远程调试工具。这些工具可以在Microsoft网站上找到,例如https://www.Microsoft.com/en-us/download/details.aspx?id=48155。URL可能会更改,因此最好搜索“Visual Studio 20XX的远程工具”。
这些就是开发人员如何加快调试应用程序的方法。还有其他一些方法,如分析应用程序内存转储并找出崩溃或内存泄漏的原因。