调试软件时,工具非常重要。调试时获取正确的工具并提取正确的信息。有了正确的错误信息,您就可以找到问题的根本原因。找到问题的根本原因,您就能解决错误。
您将找到我认为用于排除 C# .NET 错误最重要的工具列表。这些工具将帮助您找到任何问题的根本原因并解决它。
除了代码中的常见问题外,以下工具还可以处理各种类型的问题,包括:
1、
说到调试,我们的主要工具是 .NET。它是世界上最好的 IDE 之一,而且不仅仅是在 .NET 领域。它有大量功能可帮助您进行调试,包括各种工具窗口、异常选项、工具提示等。根据 2019 年的一项调查,微软已成功将基本功能和高级功能打包到一个非常直观的程序中,使其成为所有开发人员中第二受欢迎的 IDE。
近年来,出现了两个竞争对手来挑战 .NET IDE 领域:.NET Core IDE 和 .NET Code。根据我的经验,两者的调试功能仍然远远落后于 .NET Core IDE,尽管 .NET Core IDE 的重构能力和性能令人印象深刻。
除了交互式(传统)调试之外,VS 还包含许多其他分析工具:
对于上述所有类别,我更喜欢其他工具。请继续阅读以了解它们在此列表中的位置。
2、
是 .NET 调试最有用的工具之一。它是一个很好的反编译器。但它的主要用途是作为调试器。它允许您调试任何您想要的 .NET 程序,而不必担心符号或源代码。
该工具的外观和感觉与 .NET 类似。当您开始调试没有符号或源代码的 .NET 进程时,您将看到反编译的代码。现在,神奇的是:您可以放置断点。当这些断点被击中时,您将看到局部变量、线程、调用堆栈,并获得完整的调试体验。这使它成为调试第三方代码和调试生产环境的首选工具。
它非常轻量,无需安装。只需将文件夹复制到任何生产机器即可开始调试。
这个工具有个小技巧。如果你使用启动进程,那么一切都会正常工作。但是,如果你附加到正在运行的进程,加载的模块将保持优化状态。也就是说,它们在构建模式下优化代码后,一些断点将不会被命中,一些局部变量将不会显示。这几乎破坏了调试体验。解决方案是使用启动进程而不是附加到进程。
3.
是的,有免费的 .NET 反编译器。他们的许多工具实际上都进入了这个列表。我更喜欢它而不是两个反编译器,例如或,原因有两个:
提供更好的用户体验。或者至少我感觉很舒服。它看起来和感觉起来都很好。所以这可能是原因。
您可以从任何程序集创建符号服务,即使您没有符号或源代码。它可以反编译代码并从中创建符号。有了它,您可以像调试任何第三方代码一样调试。要确切了解它有多好,请参阅我的文章:在 中调试没有符号的第三方 .NET 代码,稍后会翻译。
4.
另一个很棒的工具。这是我最喜欢的性能分析工具。它允许您“记录”应用程序的运行情况,然后分析记录的性能。您将能够看到每个方法调用花费了多长时间、数据库条目、HTTP 请求所花费的时间以及垃圾收集等。
上图是对 的录制的简要分析。可以看到耗时 155 毫秒,包括 (42ms)、(16ms) 和其他方法。该方法的执行包括 42% 的 WPF 调用、20% 的用户代码、12% 的 GC 等待、10% 的代码、10% 的反射和 5% 的系统代码。相当不错,对吧?
一开始会有一个学习曲线,但是一旦你习惯了它,它就会变得非常直观。
5. .NET
内存分析器是另一类对解决内存问题必不可少的工具。这些可能是内存泄漏或由 GC(GC 压力)引起的性能影响。如果您的应用程序足够大,迟早会遇到内存问题。我希望将来能为您着想,因为这些类型的问题可能会造成毁灭性的影响。
内存分析器会拍摄“内存快照”,并让您对其进行调查。您将看到哪些对象占用了最多的内存、谁引用了它们以及为什么它们没有被垃圾回收。通过比较两个快照,您可以发现内存不足的问题。
有几种内存分析器可用,但我最喜欢的是 .NET。我发现它是功能最强大且问题最少的产品。
6.
是一个独特的扩展。它的唯一目的是帮助您在 中进行交互式调试。它有很多功能,可以分为 4 个部分:
1. 上方显示 - 在调试期间添加了一些有用的可视化功能。这包括红色/绿色突出显示和显示对象的选定属性:
还有其他内容,例如将表达式分解成各个部分:
2.LINQ 调试 - LINQ 在编写代码时非常有用,但调试起来却很困难。允许您在调试期间以近乎完美的方式研究 LINQ 表达式。

要了解有关使用或不调试 LINQ 的更多信息,请查看我的文章:如何在 C# 中调试 LINQ 查询。
3. 数据提示 - 数据提示是将鼠标悬停在 中的变量上时看到的弹出窗口。我们用我们自己的、更好的数据提示替换了该窗口。它允许“收藏”属性、搜索、导出到 JSON 和其他功能。
4. 时间旅行 - 4 增加了一项革命性的调试功能。它可以在不移动断点的情况下预测未来。也就是说,您将能够看到当前调试位置之后的代码行中发生了什么。但是,此功能并非在所有情况下都有效。例如,它无法预测 HTTP 请求结果或 SQL 请求之类的内容,因为它必须为此执行它们。
7.
是一套用于故障排除和监控软件的实用程序。它包括我们调试所需的一些最重要的工具。我建议下载整个套件并将其保存在易于从命令行输入的位置,例如:C:\ 那里有很多工具,其中一些比其他工具更有用。让我们列出一些对 .NET 最重要的工具。
它就像是强化版的 Task。它有许多对调试有用的功能,下面是其中一些:
也称为,允许您监视进程活动事件。具体来说,您可以跟踪注册表事件、文件事件、网络事件、线程活动和性能分析事件。如果您想找出您的进程涉及哪些文件或注册表,那么我们可以为您提供帮助。
是一个用于保存转储文件的命令行工具。它可以立即生成转储,也可以在触发时生成转储。例如,在崩溃或挂起时创建转储。这是我推荐的用于捕获转储的工具。以下是它的一些功能:
要查找有关 .NET 崩溃转储的更多信息,请参阅我的文章:如何在 2019 年创建、使用和调试 .NET 应用程序崩溃转储。
8、()
有一种内置机制称为“性能计数器”。这些计数器允许您根据计算机上正在发生的事情跟踪许多有用的指标。这些可以是系统范围的指标或特定于进程的指标。以下是您可以使用性能计数器测量的一些示例:
您可以监控数千种不同的计数器,它们尽可能具体。例如,如果您想知道某个进程的内存使用情况,则有以下计数器:专用字节数、虚拟字节数、工作集、专用工作集和虚拟字节数。集合、Gen X 集合、GC 时间百分比、大型对象堆大小等。
性能监视器是一款可以让你直观地查看这些计数器的工具(尽管还有其他工具)。它已预装在设备上。要运行它,只需在“开始”菜单或命令提示符中键入“性能监视器”。键入 next。
9,
是一个开源的通用分析工具。它可以做很多事情,下面是其中一些:
它的分析基于事件跟踪 (ETW) 事件。这是一个内置的日志系统,运行速度非常快,系统的每个部分都可以使用。所有内容都会将事件记录到 ETW,包括内核、操作系统、CLR 运行时、IIS、ASP.NET 框架、WPF 等。
这无疑是此列表中最复杂的工具。但它也非常强大。要开始使用,我建议观看 Nine 上的视频课程系统。
10.
是的,这是一个免费工具。这是我最喜欢的调试网络请求的工具之一。它被称为 HTTP 代理服务器,就是这样。它捕获所有 HTTP 请求,记录数据,并发送请求。
对于每个请求,您可以查看所有内容,例如流程、、、等。
对于调试来说,有两个有用的函数:
哪一个没有提及
您可能对我没有提到的一些工具感到疑惑,如果您从事开发已有很长时间,那么您可能会感到疑惑。如果您不熟悉,它是一个命令行调试器,曾经是 的主要调试工具。就像现在 .NET 的主要调试工具一样。我不认为这在 2020 年及以后会很重要。至少对于 .NET 开发来说不是。您几乎可以用它做任何事情,而且它会变得更轻松、更快捷。
Stub 的一些功能仍然很好。比如它的脚本功能、轻松的远程处理和方便的生产调试。您可以将 Stub 复制到生产机器并快速调查转储文件。它不需要像这样的大型安装。但我总是发现自己将转储文件复制到我的开发机器并使用内存分析器或类似的东西打开它们。这效率更高。因此,我认为它不再是 .NET 开发的必要调试工具。
总结
我们已经介绍了一些最好的调试工具。我相信了解这些工具对于成为一名高级开发人员至关重要。其中一些可以用同类的类似工具代替。例如,您可以将其用作内存分析器,或者可以使用性能分析器。
无论您选择什么,了解至少一个性能分析器都可以帮助您解决否则会遇到的问题。内存分析器、生产调试工具(如)、反编译器等也是如此。
祝大家调试愉快!!!
过去的亮点
给我好看
您看此文用
秒,转发只需1秒呦~
好看你就
点点
我