在调试软件时,工具很是重要。获取正确的工具,而后再调试时提取正确的信息。根据获取的正确的错误信息,能够找到问题的根源所在。找到问题根源所在,你就可以解决该错误了。html
你将看到我认为最基本的解决在C# .NET 中错误问题的工具的列表。这些将帮助你找到任何难题的根本缘由并加以解决。数据库
除了代码中的常见问题外,一下工具还能够处理各类问题类型,包括:服务器
当涉及调试时,咱们的主要工具就是Visual Studio。它是世界上最好的IDE之一,而不只仅是在.NET 领域。它具备大量功能来帮助你进行调试,包括各类工具窗口,异常选项,工具提示等。根据2019年StackOverflow的调查,微软设法将基本功能和高级功能都整合到一个很是直观的程序中,是Visual Sudio成为全部开发人员第二受欢迎的IDE。网络
近年来,出现了两个竞争对手来挑战.NET IDE 领域:Rider和Visual Studio Code。根据个人经验,二者的调试功能仍然远远落后于Visual Studio。尽管Rider的重构功能和性能使人印象深入。app
除了交互式(传统)调试,VS还包括许多其余分析工具:框架
对于上述全部类别,我更喜欢使用其余工具。继续进行阅读,它们都在本次清单中。asp.net
dnSpy 是用于 .NET 调试的最有用的工具之一。它是一个很好的反编译器。可是它的主要用途是做为调试器。dnSpy容许你调试任何 .NET程序你,而无需考虑符号或者源代码。ide
该工具的外观和感受相似于Visual Studio。当你开始调试没有符号或者源代码的.NET进程时,dnSpy将向你显示反编译的代码。如今,这里有个魔术:你能够在反编译的代码本上中放置断点。遇到这些断点时,你将看到局部变量,线程,调用堆栈,并具备完整的调试经验。这使dnSpy成为调试第三方代码和调试生产环境的首选工具。工具
它轻巧,无需安装。只需将文件夹复制到任何生产机器上,而后开始调试。 性能
这个工具备个小窍门。若是你使用dnSpy启动进程,那么一切将正常运行。可是,若是你附加到正在运行的进程时,则已加载的模块将保持优化状态。也就是说它们是在
Release
模式下构建的。优化代码后,将不会遇到某些断点,也不会显示某些局部变量。这几乎破坏了调试体验。解决方案是使用dsSpy启动进程,而不是附加到进程中。
dotPeek是JetBrains的免费.NET反编译器。它们的许多工具实际上进入了该列表。与两个反编译器(如ILSpy或JustDecompile)相比,我更喜欢dotPeek,这有两个缘由:
dotTrace是JetBrains的另外一个出色工具。这是我最喜欢的性能分析工具。dotTrance容许你“记录”应用程序的运行,而后分析记录的性能。你将可以看到每种调用方法花费了多长时间,数据库条用,HTTP请求以及垃圾回收期间花费的时间等等。
上图显示了对Visual Studio的简短记录分析。你能够看到ShowWindow
花费了155毫秒,其中包括HwndSourceHook
(42ms),Convert
(16ms)等方法用时。此方法的执行包括42%的WPF调用,20%的用户代码,12%的GC等待,10%的Collections
代码,10%的反射和5%的系统代码。太好了吧?
首先,这是一个学习曲线,可是一旦习惯了,它会变得很是直观。
内存分析器是解决内存问题必不可少的另外一类工具。这些多是因为GC(GC压力)引发的内存泄露或性能影响。若是你有足够大的应用程序,那么早晚会遇到内存问题。我但愿为你之后着想,由于这些类型的问题多是毁灭性的。
内存探查器能够拍摄“内存快照”,并让你对器进行调查。你将看到哪些对象占用最多的内存,谁引用了它们,以及为何未进行垃圾回收。经过比较两个快照,能够发现内存泄露。
有几种可用的内存分析器,可是SciTech's .NET Memory Profiler是个人最爱。我发现它是功能最强大的产品,问题最少。
OzCode是独特的Visual Studio扩展。其惟一目的是帮助你在Visual Studio中进行交互式调试。OzCode具备不少功能,能够分为4部分:
1.上方显示 - OzCode在调试期间添加了一些有用的可视化功能。这包括红色/绿色突出显示并显示对象的选定属性:
还有其余内容,例如将表达式分解成各个部分:
2.LINQ调试 - LINQ在编写代码时很棒,可是很难调试。OzCode容许在调试过程当中以几乎完美的方式研究LINQ表达式。
要了解有关使用或不使用OzCode调试LINQ的更多信息,请查看个人文章:如何在C#中调试LINQ查询。
3.数据提示 - 数据提示是将鼠标悬停在Visual Studio中的变量上时看到的弹出窗口。OzCode用本身的更好的数据提示替换了该窗口。它容许“收藏夹”属性,搜索,导出为JSON和其余功能。
4.时间穿梭 - OzCode 4 添加了新的革命性调试功能。它能够预测将来而无需移动断点。也就是说,你将可以看到当前调试位置以后发生的代码行中发生的状况。不过,此功能并不是在全部状况下都有效。例如,OzCode没法预测HTTP请求结果或SQL请求之类的事情,由于它必须为此执行它们。
SysInternals是一套用于对Windows软件进行故障排除和监视的实用程序。它包括一些咱们调试所需的最重要的工具。我建议下载整个套件并将其保存在易于命令行键入的位置,例如:C:\Sysinternals
。有不少工具,其中一些比其余工具更有用。让咱们列出一些.NET最重要的。
Process Explorer就像类固醇上的Windows Task Manager。它具备许多对调试有用的功能,这里是其中的一些:
Process Monitor 也称为ProcMon,容许你监视流程活动事件。具体的说,你能够弹道注册表事件,文件事件,网络事件,线程活动和性能分析事件。若是你想找出你的过程涉及哪些文件或注册表,那么ProcMon能够为你提供帮助。
ProcDump是用于保存转储文件的命令行工具。它能够当即或在触发器上生成转储。例如,在崩溃或挂起时建立转储。这是我推荐的用于捕获转储的工具。如下是它的一些功能:
若要查找有关ProcDump和Dump的更多信息,请参阅个人文章:2019年若是建立、使用和调试.NET 应用程序崩溃转储。
Windows中有一种称为“性能计数器”的内置机制。这些计数器可以让你根据计算机上发生的事情跟踪大量有用的指标。这些多是系统范围内的指标,也多是针对特定过程的指标。如下是一些可使用性能计数器衡量的事情的示例:
你可能会监视成千上万种不一样的计数器,它们会尽量的具体。例如,若是你想了解进程的内存使用状况,则有如下计数器:私有字节,虚拟字节,工做集,私有工做集,Gen X 集合,GC时间百分比,大对象堆大小 等等。
性能监视器是使你能够直观地看到这些计数器的工具(尽管也有其余工具)。它以在Windows设备预安装上了。要运行它,只须要在开始菜单中键入“Performance Monitor”,或在命令提示符下键入perfmon
。
PerfView是一个开源通用分析工具。它能够作不少事情,如下是其中一些:
它的分析是基于Windows事件跟踪(ETW)事件。这是一个内置的日志记录系统,运行速度很是快,Windows的每一个部分均可以使用它。一切都将事件记录到ETW,包括内核,Windows操做系统,CLR运行时,IIS,ASP.NEt框架,WPF等。
PerfView很容易成为此列表中最复杂的工具。可是它也很是强大。要开始使用PerfView,我建议在第九频道观看Vance Morrison的视频课程系统。
Fiddler是Progress Telerik的免费工具。这是我最喜欢的网络请求调试工具之一。它被称为HTTP代理服务器,仅此而已。它捕获全部HTTP请求,记录数据,并按其方式发送请求。
对于每个请求,你均可以查看流程,Headers,payload,response,status等全部的内容。
对于调试,Fiddler具备两个有用功能:
你可能会想知道我未说起的某些工具,若是你已经作开发很长时间了,你可能会想到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://www.cnblogs.com/sesametech-netcore/p/12365896.html