首页 » 软件优化 » 干货来了!推荐10个用于C#.NET开发的基本调试工具(调试工具来了干货请求)

干货来了!推荐10个用于C#.NET开发的基本调试工具(调试工具来了干货请求)

乖囧猫 2024-11-03 18:05:56 0

扫一扫用手机浏览

文章目录 [+]

话不多说,直接上干活!

1、Visual Studio

当涉及调试时,我们的主要工具就是Visual Studio。
它是世界上最好的IDE之一,而不仅仅是在.NET 领域。
它具有大量功能来帮助你进行调试,包括各种工具窗口,异常选项,工具提示等。
根据2019年StackOverflow的调查,微软设法将基本功能和高级功能都整合到一个非常直观的程序中,是Visual Sudio成为所有开发人员第二受欢迎的IDE。

近年来,出现了两个竞争对手来挑战.NET IDE 领域:Rider和Visual Studio Code。
根据我的经验,两者的调试功能仍然远远落后于Visual Studio。
尽管Rider的重构功能和性能令人印象深刻。

干货来了!推荐10个用于C#.NET开发的基本调试工具(调试工具来了干货请求) 软件优化
(图片来自网络侵删)

除了交互式(传统)调试,VS还包括许多其他分析工具:

性能分析内存分析使用IntelliTrace进行历史调试云调试(作为云探索的一部分)

对于上述所有类别,我更喜欢使用其他工具。
继续进行阅读,它们都在本次清单中。

2、dnSpy

dnSpy 是用于 .NET 调试的最有用的工具之一。
它是一个很好的反编译器。
但是它的主要用途是作为调试器。
dnSpy允许你调试任何 .NET程序你,而无需考虑符号或者源代码。

该工具的外观和感觉类似于Visual Studio。
当你开始调试没有符号或者源代码的.NET进程时,dnSpy将向你显示反编译的代码。
现在,这里有个魔术:你可以在反编译的代码本上中放置断点。
遇到这些断点时,你将看到局部变量,线程,调用堆栈,并具有完整的调试经验。
这使dnSpy成为调试第三方代码和调试生产环境的首选工具。

它轻巧,无需安装。
只需将文件夹复制到任何生产机器上,然后开始调试。

这个工具有个小窍门。
如果你使用dnSpy启动进程,那么一切将正常运行。
但是,如果你附加到正在运行的进程时,则已加载的模块将保持优化状态。
也就是说它们是在Release模式下构建的。
优化代码后,将不会遇到某些断点,也不会显示某些局部变量。
这几乎破坏了调试体验。
解决方案是使用dsSpy启动进程,而不是附加到进程中。

3、dotPeek

dotPeek是JetBrains的免费.NET反编译器。
它们的许多工具实际上进入了该列表。
与两个反编译器(如ILSpy或JustDecompile)相比,我更喜欢dotPeek,这有两个原因:

dotPeek提供了更好的用户体验。
或至少我感到自在。
它看起来和感觉都像Resharper。
所以这可能是原因。
dotPeek可以从任何程序集中创建符号服务区,即使没有符号或源代码也是如此。
它像dnSpy一样,它或反编译代码并从中创建符号。
借助dotPeek,Visual Studio就像dnSpy一样调试任何第三方代码。
要查看准确程度,请参阅我的文章:在Visual Studio中调试没有符号的第三方.NET代码,后续会进行翻译。
4、dotTrace

dotTrace是JetBrains的另一个出色工具。
这是我最喜欢的性能分析工具。
dotTrance允许你“记录”应用程序的允许,然后分析记录的性能。
你将能够看到每种调用方法花费了多长时间,数据库条用,HTTP请求以及垃圾回收期间花费的时间等等。

上图显示了对Visual Studio的简短记录分析。
你可以看到ShowWindow花费了155毫秒,其中包括HwndSourceHook(42ms),Convert(16ms)等方法用时。
此方法的执行包括42%的WPF调用,20%的用户代码,12%的GC等待,10%的Collections代码,10%的反射和5%的系统代码。
太好了吧?

首先,这是一个学习曲线,但是一旦习惯了,它会变得非常直观。

5、SciTech's .NET Memory Profiler

内存分析器是解决内存问题必不可少的另一类工具。
这些可能是由于GC(GC压力)引起的内存泄露或性能影响。
如果你有足够大的应用程序,那么迟早会遇到内存问题。
我希望为你以后着想,因为这些类型的问题可能是毁灭性的。

内存探查器可以拍摄“内存快照”,并让你对器进行调查。
你将看到哪些对象占用最多的内存,谁引用了它们,以及为什么未进行垃圾回收。
通过比较两个快照,可以发现内存泄露。

有几种可用的内存分析器,但是SciTech's .NET Memory Profiler是我的最爱。
我发现它是功能最强大的产品,问题最少。

6、OzCode

OzCode是独特的Visual Studio扩展。
其唯一目的是帮助你在Visual Studio中进行交互式调试。
OzCode具有很多功能,可以分为4部分:

上方显示 - OzCode在调试期间添加了一些有用的可视化功能。
这包括红色/绿色突出显示并显示对象的选定属性:

还有其他内容,例如将表达式分解成各个部分:

LINQ调试 - LINQ在编写代码时很棒,但是很难调试。
OzCode允许在调试过程中以几乎完美的方式研究LINQ表达式。

要了解有关使用或不使用OzCode调试LINQ的更多信息,请查看我的文章:如何在C#中调试LINQ查询。

数据提示 - 数据提示是将鼠标悬停在Visual Studio中的变量上时看到的弹出窗口。
OzCode用自己的更好的数据提示替换了该窗口。
它允许“收藏夹”属性,搜索,导出为JSON和其他功能。
时间穿梭 - OzCode 4 添加了新的革命性调试功能。
它可以预测未来而无需移动断点。
也就是说,你将能够看到当前调试位置之后发生的代码行中发生的情况。
不过,此功能并非在所有情况下都有效。
例如,OzCode无法预测HTTP请求结果或SQL请求之类的事情,因为它必须为此执行它们。

7、SysInternals Suite

SysInternals是一套用于对Windows软件进行故障排除和监视的实用程序。
它包括一些我们调试所需的最重要的工具。
我建议下载整个套件并将其保存在易于命令行键入的位置,例如:C:\Sysinternals。
有很多工具,其中一些比其他工具更有用。
让我们列出一些.NET最重要的。

Process Explorer

Process Explorer就像类固醇上的Windows Task Manager。
它具有许多对调试有用的功能,这里是其中的一些:

查看加载的模块查看句柄创建Dump查看进程树查看性能计数器

Process Monitor

Process Monitor 也称为ProcMon,允许你监视流程活动事件。
具体的说,你可以弹道注册表事件,文件事件,网络事件,线程活动和性能分析事件。
如果你想找出你的过程涉及哪些文件或注册表,那么ProcMon可以为你提供帮助。

ProcDump

ProcDump是用于保存转储文件的命令行工具。
它可以立即或在触发器上生成转储。
例如,在崩溃或挂起时创建转储。
这是我推荐的用于捕获转储的工具。
以下是它的一些功能:

立即创建转储创建具有特定间隔的多个转储(例如3个转储,相隔5秒)一旦超过CPU阈值,就创建转储如果进程挂起,则创建转储崩溃时创建转储

若要查找有关ProcDump和Dump的更多信息,请参阅我的文章:2019年如果创建、使用和调试.NET 应用程序崩溃转储。

8、Performance Monitor (PerfMon)

Windows中有一种称为“性能计数器”的内置机制。
这些计数器可让你根据计算机上发生的事情跟踪大量有用的指标。
这些可能是系统范围内的指标,也可能是针对特定过程的指标。
以下是一些可以使用性能计数器衡量的事情的示例:

CPU使用率内存使用率进程中引发的异常数I/O字节的读写对你的asp.net应用程序的请求数在asp.net应用程序中请求响应时间

你可能会监视成千上万种不同的计数器,它们会尽可能的具体。
例如,如果你想了解进程的内存使用情况,则有以下计数器:私有字节,虚拟字节,工作集,私有工作集,Gen X 集合,GC时间百分比,大对象堆大小 等等。

性能监视器是使你可以直观地看到这些计数器的工具(尽管也有其他工具)。
它以在Windows设备预安装上了。
要运行它,只需要在开始菜单中键入“Performance Monitor”,或在命令提示符下键入perfmon。

9、PerfView

PerfView是一个开源通用分析工具。
它可以做很多事情,以下是其中一些:

性能分析内存分析分析ETW事件从Linux导入性能快照有关应用程序行为的各种报告,包括JIT编译时间,垃圾回收时间等

它的分析是基于Windows事件跟踪(ETW)事件。
这是一个内置的日志记录系统,运行速度非常快,Windows的每个部分都可以使用它。
一切都将事件记录到ETW,包括内核,Windows操作系统,CLR运行时,IIS,ASP.NEt框架,WPF等。

PerfView很容易成为此列表中最复杂的工具。
但是它也非常强大。
要开始使用PerfView,我建议在第九频道观看Vance Morrison的视频课程系统。

10、Fiddler

Fiddler是Progress Telerik的免费工具。
这是我最喜欢的网络请求调试工具之一。
它被称为HTTP代理服务器,仅此而已。
它捕获所有HTTP请求,记录数据,并按其方式发送请求。

对于每一个请求,你都可以查看流程,Headers,payload,response,status等所有的内容。

对于调试,Fiddler具有两个有用功能:

重新请求 - 你可以右键单击任何请求,然后单击“Replay”,这将再次发送完全相同的请求。
在调试服务器端问题时非常有用。
如果你要重现有问题的请求,Fiddler可以避免在客户端上重新运行方案以再次发送相同请求的麻烦。
它还有助于处理难以重现的请求。
编辑并重新请求 - 除了重新请求外,Fiddler允许我们修改请求。
你可以更改标题,正文,甚至URL本身。
你可以使用它来查看服务器端如何处理极端情况。
或重现特定请求上发生的问题。
哪一个没有提到

你可能会想知道我未提及的某些工具,如果你已经做开发很长时间了,你可能会想到WinDbg。
如果你不熟悉WinDbg,它是一个命令行调试器,曾经是Windows的主要调试工具。
有点像现在的Visual Studio用于.NET。
我觉得这在2020年以及以后并不重要。
至少不适用于.NET开发。
你可以使用Visual Studio进行几乎所有操作,并且它将变得越来越容易和快捷。

WinDbg的某些功能仍然是好的。
像它的脚本功能一样,易于远程处理和方便的生产调试。
你可以将WinDbg复制到生产计算机上,并快速调查转储文件。
它不需要像Visual Studio这样的大型安装。
但是我总是发现自己将转储文件复制到我的开发机器上,并使用内存分析器或者Visual Studio打开它们。
这样更加有效。
因此,我认为WinDbg不再是.NET开发所必需的调试工具。

总结

我们介绍了一些最佳的调试工具。
我认为,了解这些工具对于成为高级开发人员至关重要。
其中提到了一些可以用其类别中的类似工具代替。
例如,你可以将dotMemory用作内存分析器,Visual Studio的内置分析器甚至PrefView。
或者你可以使用RedGate的性能分析器来代替dotTrace。

无论你选择什么,都至少知道一个性能分析器可以帮助你解决本来会遇到的难题。
内存分析器、生产调试工具(如dnSpy),反编译器以及其余的工具也是如此。

祝大家调试愉快!


原文:https://mp.weixin.qq.com/s/IwxyL_IFOYqzRreALkaViw

欢迎点赞+转发+关注!
大家的支持是我分享最大的动力!


标签:

相关文章

还招人吗?(战区招人哨位台独演习)

今晨7点45分东部战区在台海地区开始实施一年多以来最大规模军事演习(5月23日-5月24日)演习区域涵盖台岛北部、南部、东部及金门...

软件优化 2024-12-16 阅读510 评论0