.NET的十大调试技巧
Posted qilundianshang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET的十大调试技巧相关的知识,希望对你有一定的参考价值。
人鼠之间最周密的计划有时还是会出岔子。即使您已经严格地将单元测试放在了适当的位置,有时您仍然想要开始调试应用程序或单元测试。在本文中,我们将了解. net的10个调试技巧。
1.设置断点
断点是调试的基本单位之一。它是调试环境的一个提示,它应该在某个点停止应用程序的执行。如果您使用的是完整的Visual Studio IDE,则添加断点很简单。单击要停止执行的代码行旁边的装订线。
断点可以添加到几乎任何执行的代码行中。这意味着您无法Fact 在此代码中的属性或实际函数名称上断点 。在前一种情况下,如果需要打破属性,可以进入属性定义。在后者中,函数第一行的断点将在函数执行之前停止执行。可以在执行代码之前或在调试时添加断点。
2.有条件的断点
有时,在遇到您正在寻找的条件之前,可能会多次执行一段代码。例如,您可能正在使用集合,而第93个元素是您需要调试的元素。您可以坐下来点击F5 92次以获得您感兴趣的记录,或者您可以使用条件断点。条件断点只会导致进程在满足条件时停止。条件可以非常简单,例如计算一条线被击中的次数。它们也可以更复杂,例如检查某些值是否为真。
条件对话框中的一个未充分利用的功能是在值更改时设置断点。如果您试图追踪正在改变某个变量值的内容,这可能非常有用。此外,还有一个复选框,用于在命中断点时执行操作。您可以通过这种方式快速将临时日志添加到正在运行的应用程序
3.查看返回值
在大多数情况下,您可以在调试时使用鼠标悬停在变量上,以了解变量中包含的值。您无法执行此操作的一个地方是从函数中获取返回值。您不能简单地将鼠标悬停在return语句上并预览将从函数返回的内容。要拉出一个值,你可以看两个地方:手表和当地人。
在locals窗口中,您可以通过查找函数的名称(当然是完全限定的),然后单词“return”来查看返回值。我在函数的结束括号上放置一个断点,以查看值将被退回。
在监视窗口中,您可以通过检查名为的特殊变量来引用当前返回值 $ReturnValue 。
4.编辑值
能够在表盘中看到一个价值是一回事,但不像我在任何一家销售中国商店的孩子,你可以捅东西。如果您需要模拟某些返回值或检查特定的,难以重现的变量集会发生什么,那么可以通过查看locals窗口中显示的值来完成。如果您有需要测试的边界条件,但是不确定如何设置输入以获得所需的输出,则此技术特别有用。在下面的视频中,您可以看到我们下一个调试提示提供的第一个和最后一个总和的预览:OzCode。
5. OzCode
与大多数其他IDE相比,Visual Studio在调试方面是IDE的凯迪拉克。添加OzCode将一组火箭助推器绑在上面。它提供了丰富的工具集,使调试更加容易。我特别喜欢它在调试会话期间对代码显示所做的更改。您可以看到,在上面的视频中,变量值以内联方式显示,而不必将鼠标悬停在它们上面。此外,您可以在复杂对象或对象集合中搜索特定值。
您可以在他们的网站上阅读有关OzCode功能的所有信息。该工具不是免费的,但它是一个值得添加到您的工具带。如果您的代码库不能通过单元测试轻松测试,那么购买是值得的。
6.添加单元测试
有时最好的调试形式不是调试。调试的是它往往是一个非常缓慢的过程。您需要设置一个测试用例,设置一些断点,然后运行应用程序以到达您需要的位置来运行您希望调试的行为。我发现这在过去是一次非常令人沮丧的经历。图形应用程序经常需要花费大量时间点击按钮才能找到问题所在的位置。
您可以更好地设置一个单元测试,以便使用您需要的值来运用相关功能,而不是挣扎于此。到目前为止,本文中介绍的技术可能有助于您了解哪些值导致问题。然后可以将这些提取到单元测试中以加强调试周期。当然,您可以调试单元测试以真正解决问题。
有无数伟大的单元测试工具,其中一些甚至可以为您生成一些测试。利用这些工具并构建一套单元测试可以减少将来必须放弃调试的次数。最终的结果是,在将来更改代码时,您会感觉更舒服,因为您知道自己拥有可靠的测试安全网。
额外提示:使用前缀签入
你可能会认为Prefix只是一个工具,可以让你深入了解你的代码在做什么,但它不止于此。您可以使用前缀查找从n + 1个错误到隐藏异常以及获取代码建议的所有内容。经常查看Prefix浮出的日志将足以指出您正确的方向来修复您的错误。即使您正在进行初始开发,Prefix也可以一直运行,因此您可以在它们仍在计算机上时捕获错误,并且您不必在生产中调试问题。
阅读为什么APM使用正在向左转发展和QA。
很难测试代码
如果您的代码库难以测试,并且其中有一些代码库,那么您可能想要获取Michael C. Feathers的书“有效地使用遗留代码”的副本。本书的附录提供了有关如何从混乱的不可测试代码中提取可测试代码的具体建议。
7. LINQ中的断点
我是一名LINQ瘾君子。在那里,我出来说了。没有构建的应用程序没有大量使用LINQ。我喜欢能够以非常简洁的方式进行排序,过滤和投影的功能性。我的大脑用于解析和理解复杂的查询,我知道我作为开发人员的一个缺点就是编写了不可接受的LINQ语句。传统上,调试LINQ非常复杂,而且Microsoft文档中的建议非常少。您可以通过一次选择查询块并在快速监视或观察窗口中评估它们来进行调试。这留下了一些需要。
OzCode有一个很好的可视化工具,它将显示如何在每一步中更改LINQ查询中的数据。在这里,您可以看到一个查询,它接受一堆单词,过滤它们的长度,抓取第一个字母,对它们进行分组,并找到最大的计数。
查询显示为一系列面板,显示执行步骤后的数据状态。目前只支持可视化全框架LINQ查询,但对.NET Core的支持正在进行中。
8.评估没有副作用的功能
功能编程中精心设计的方法没有副作用。也就是说,您可以使用相同的输入多次运行相同的功能,结果将是相同的。这称为纯函数,它通过缓存和优化实现各种乐趣。不幸的是,我们遇到的大多数功能都不是纯粹的,可能会产生副作用。考虑这个功能:
static int hitCounter = 0 ;
public static int GetAndIncrement()
{
return hitCounter ++ ;
}
每次调用此函数时,结果都是不同的:0,1,2,3。如果您在快速监视窗口中评估该函数,则也是如此。
每次评估函数时,命中计数器的副作用都会增加。调试代码时,这是一个简单的条件。为了避免在我们调试时更改正在运行的程序的状态,我们可以在表达式中添加“,nse”。
9.在VSCode中调试
如果您正在处理未使用完整版Visual Studio的项目,那么您仍然可以通过利用Visual Studio Code获得丰富的调试体验。VSCode的调试体验不如完整的VS那么好,但它仍然很好。在OzCode中找到的swish工具尚未出现在VS Code中。您可以使用VSCode调试整个不同语言的主机:从Java到Python再到C#,所有这些都通过一系列插件得到支持。 有关如何开始调试的文档也很棒,可能是您需要的唯一起点。
10.说出来
这可能是您调试代码时最重要的事情。找一个朋友,一个同事或一个无生命的物体,并谈谈你遇到的问题。我发现只是将我的想法充分地解释到其他人的行为就足以指出我的解决方向。有时,最简单的解决方案比光滑的调试工具更好。
以上是关于.NET的十大调试技巧的主要内容,如果未能解决你的问题,请参考以下文章
很多.net 程序员不知道又非常重要的 .net高级调试技巧.调试别人的dll方法内的变量