在软件开发的阶梯上,经常在调试软件时重复执行相同的手动步骤,不断地扩展和检查各种信息,试图在脑海中捕捉到出错的完整画面及其原因。OzCode,这个创新的C#调试扩展,完全改变了调试C#代码的方式!OzCode通过强大的可视化、智能对象检查、搜索和过滤集合等功能,增强了Visual Studio的调试体验,让专注于相关数据。本文将展示OzCode的一些功能。
安装OzCode后,当在调试器下运行程序时,会注意到许多新事物。一旦断点被触发,将鼠标悬停在任何变量上,将看到OzCode的增强型数据提示:
图1:OzCode数据提示,显示客户集合的值
数据提示,或对象检查器,是花费大部分时间检查值、寻找所需内容的地方。OzCode的数据提示允许获取有关对象的大量信息,而无需展开每一个对象。在图1中,所有30个客户看起来都很相似,很难区分哪一个是哪一个。每个客户对象可能包含许多属性,但可能只对其中一些感兴趣。使用OzCode的揭示功能,可以只查看想要的属性,而不会浪费时间:
图2:揭示对象属性
揭示功能使只关注感兴趣的属性,例如ID和FullName,通过点击属性名称旁边的图标,这些“星标”属性将立即出现在该集合中所有相同类型的项目上。
图3:揭示客户
OzCode还允许在任何类型的对象内进行搜索,通过在数据提示底部的搜索文本框中使用。结果将在找到后立即显示:
图4:在对象内搜索"Michael"
现在已经使对象看起来更清晰了,是时候理解代码的其他部分是如何被使用的,哪些方法被调用以及它们返回了什么值。可以通过OzCode的强大功能简化一目了然地获取所有这些信息。当逐步执行语句时,OzCode提供了每个谓词评估结果的可视化表示,以及任何内联和嵌套方法调用的返回值。
图5:if语句准备简化
点击图标将在语句的每个部分放置额外信息,允许查看总体结果,并让深入了解各个步骤:
图6:理解为什么if返回false
使用箭头(或按快捷键Alt-K或Alt-J),可以深入了解if语句的各个部分。在图6中的示例中,如果按一次,将看到方法IsLotteryWinner返回true(因此IsVIP甚至没有执行),但IsBudgetAvailable返回false,因此整个语句的结果是false。再深入一次将显示CalculateGiftCost的结果。
图7:深入挖掘
简化功能使能够轻松地弄清楚为什么在事后返回了某些值,而无需使用临时变量或在监视窗口中评估表达式。
当使用OzCode调试程序时,会注意到一些新的图标。这些图标中的大多数提供了上下文操作,取决于代码中正在发生的事情。其他图标始终可见,使能够轻松执行调试相关操作。
图8:Visual Studio中的QuickActions栏
QuickActions允许对当前正在调试的代码执行各种操作。图8中的图像显示了当前在调试器中逐步执行的当前行的一组上下文操作。可以使用鼠标点击或按Alt-Shift-D激活QuickActions。
图8中看到的第一个选项是显示所有实例。此功能允许找到当前加载在应用程序内存(托管堆)中的特定类型的所有实例:
图9:显示客户类型的所有实例
在这里,可以看到当前在内存中活动的所有实例。OzCode记住了为特定类型定义的所有先前设置,例如揭示,以及允许在显示的项目内搜索。
显示所有实例还有助于探索托管堆并可视化任何引用或装箱值类型——通过指定其完全限定名称(由IntelliSense辅助)。图10中,过程正在显示所有System.String实例:
图10:探索托管堆
此外,可以使用显示所有实例来找到所有实例中对象的特定属性或字段的所有值,通过点击属性旁边的图标:
图11:显示所有Address实例中State的值
最后,点击类名称级别的图标将允许快速添加(或删除任何现有)所有类型成员的断点!
接下来,将看看如何在不更改一行代码或在代码中添加日志语句的情况下,获取正在执行的代码的丰富信息。
假设有一个方法,它被多个线程调用,因此尝试通过仅放置断点并尝试逐步执行代码来调试它并不方便——将不断地在线程之间切换并丢失上下文。使用OzCode的Tracepoints,可以跟踪对这个方法的所有调用。点击方法名称旁边的图标将允许跟踪每次进入方法的情况。选择后,将打开以下窗口:
图12:带有预填充消息的Tracepoint对话框
可以在表达式字段中指定任何自定义消息,还可以指定任何局部变量或其他代码表达式的值。在底部文本框中,将看到此表达式将是什么样子的预览。
图13:向Tracepoint添加更多值
继续执行后,将在Visual Studio的右下角看到一个新图标,表示有跟踪消息可用:
图14:Tracepoint消息
可以通过点击“查看消息”来查看跟踪消息,它们将在OzCode内置的跟踪日志查看器中打开,允许搜索、过滤和排序跟踪消息以找到想要的内容:
图15:Tracepoints消息查看器。支持导出到Excel
还有更多的上下文操作可用于各种对象,Magic Wand功能允许执行额外的操作,例如无需离开数据提示即可设置条件断点!
图16:Magic Wand显示选定对象的附加操作
每隔一段时间,就需要处理代码中的异常。OzCode的Exceptions Trail使调查任何异常变得容易。当异常发生时,可以使用“查看异常详细信息”QuickAction查看其详细信息:
图17:只要范围内有异常,此QuickAction就可用
将打开以下窗口:
图18:显示异常详细信息。轻松导航内部异常!
如图18所示,所有嵌套的内部异常都出现在一个漂亮的面包屑控件中,允许轻松地调查根本原因,还可以直接从异常轨迹窗口在Google或StackOverflow中搜索异常文本。底部可以看到有关选定异常的所有详细信息,所有其他OzCode功能,如揭示或搜索都是可用的。最后,即使在停止调试后,此窗口也将继续显示异常详细信息,允许在进程被终止时导航调用堆栈。
OzCode使能够轻松地在大量数据中找到所需的信息。假设有一个包含30个项目的集合,每个项目都是一个具有名称和年龄的Person对象。现在,假设只想显示那些年龄在30岁以下的人,所以可以过滤集合。以下动画展示了如何做到这一点:
图19:通过谓词过滤集合
OzCode的另一个很酷的功能是比较两个(或更多)不同的对象实例,并查看它们之间的差异。在图20中,可以看到两个PhoneBook对象的实例,其中一个没有正确显示信息。可以看到差异用红色突出显示:
图20:查看两个对象之间的差异
OzCode可以做更多的事情,使C#调试变得轻松!敦促查看所有教学视频,并观看教学视频,了解如何开始使用。