VS调试技巧
来源:了解 Visual Studio 调试器在工作效率方面的提示和技巧
固定数据提示
如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看。 即使在重新启动后,固定的变量也能保持不动。 要固定数据提示,请在鼠标悬停其上时单击固定图标。 你可以固定多个变量。
编辑代码并继续调试 (C#,VB、 c + +)
在 Visual Studio 支持的大多数语言中,你都可以在调试会话的过程中编辑代码,然后继续调试。 要使用此功能,请先在调试器中暂停,用鼠标点击进入代码,进行编辑,然后按 F5、F10 或 F11 键继续调试。
有关功能使用和功能限制的详细信息,请参阅编辑并继续。
调试难以再现的问题
如果在应用中重新实现特定状态很困难或很费时,可以考虑使用条件断点。 你可以使用条件断点并对其加以筛选,以免破坏应用代码,直到应用进入所需的状态(例如,变量正在存储错误数据的状态)。 你可以使用表达式、筛选器、命中次数等来设置条件。
创建条件断点
-
右键单击断点图标 (红色的球),然后选择条件。
-
在断点设置窗口中,键入一个表达式。
-
如果你对另一种类型的条件感兴趣,请在断点设置对话框中选择筛选器,而不是条件表达式,然后按照筛选器的提示操作。
更改执行流
让调试器暂停在某行代码上,用鼠标抓住左侧的黄色箭头指针。 将黄色箭头指针移动到代码执行路径中的其他点上。 然后通过 F5 键或步骤命令继续运行应用。
通过更改执行流,你可以进行测试不同代码执行路径或重新运行代码等操作,而无需重启调试器。
警告
通常你需要小心使用此功能,工具提示中会出现警告。 你也可能会看到其他警告。 移动指针不能还原到以前的应用程序状态应用程序。
跟踪范围外的对象 (C#,Visual Basic)
很容易地查看变量使用调试器窗口等监视窗口。 但是,当变量超出作用域中时才监视窗口中,您可能会注意到它将灰显。在某些应用方案中,甚至当变量超出作用域是,并且可能想要密切关注变量的值可能会更改 (例如,变量可能会收到垃圾回收)。 可以通过创建用于在对象 ID 来跟踪变量监视窗口。
创建对象 ID
-
在要跟踪的变量附近设置一个断点。
-
启动调试器 (F5),并在断点处停止。
-
查找中的变量局部变量窗口 (调试 > Windows > 局部变量),右键单击该变量,然后选择创建对象 ID。
-
应该会在“局部变量” $ 窗口中看到 $ 窗口中设置断点来中断调用函数返回到的指令或行处的执行。 此变量是对象 id。
-
右键单击对象 ID 变量,然后选择添加监视。
有关详细信息,请参阅创建的对象 ID。
查看函数的返回值
若要查看你的函数的返回值,请查看中显示的函数自动窗口时在逐句通过代码。 若要查看函数的返回值,请确保已执行您感兴趣的函数 (按F10如果您当前已停止在函数调用上一次)。 如果窗口已关闭,则使用调试 > Windows > 自动以打开自动窗口。
此外,可以输入中的函数即时窗口来查看返回值。 (使用打开它调试 > Windows > 即时。)
此外,还可以在监视和即时窗口中使用伪变量,如 $ReturnValue
。
检查可视化工具中的字符串
在使用字符串时,如果能看到完整的、带格式的字符串会很有帮助。 要查看纯文本、XML、HTML 或 JSON 字符串,请将鼠标悬停在包含字符串值的变量上,然后单击放大镜图标。
字符串可视化工具可以帮你确定字符串的格式是否正确,具体取决于字符串的类型。 例如,如果值字段为空,表明可视化工具类型未识别出该字符串。 有关详细信息,请参阅字符串可视化工具对话框。
对于调试器窗口中显示的其他几个类型(例如 WPF 对象),同样可以打开可视化工具。
在已处理的异常处中断代码
调试器将中断你的代码上未经处理的异常。 但是,处理异常 (如内出现的异常try/catch
块) 也可以是 bug 的源,可能想要调查发生时。 可以配置调试器通过配置选项中的为已处理的异常的代码中断异常设置对话框。 打开此对话框中,请选择调试 > Windows > 异常设置。
通过异常设置对话框,你可以让调试器在特定异常处中断代码。 在下图中,调试器会在发生 System.NullReferenceException
时中断代码。 有关详细信息,请参阅管理异常。
调试死锁和争用条件
如果需要调试的问题对于多线程应用程序很常见,在调试时查看线程的位置,通常会有所帮助。 可使用源中显示线程按钮轻松完成此操作。
在源代码中显示线程
-
调试时,单击源中显示线程按钮
中调试工具栏。
-
查看窗口左侧的滚动条。 在这一行,你可以看到线程标记图标
,类似于两根细线。 线程标记指示线程在此位置停止。
注意,线程标记可能被断点不完全遮挡。
-
将指针悬停在线程标记上。 屏幕上将显示数据提示。 数据提示将告诉你每个已停止线程的名称和线程 ID。
你还可以查看中的线程的位置并行堆栈窗口。
检查 web 服务和网络资源 (UWP) 的有效负载
在 UWP 应用中,你可以分析执行使用的网络操作Windows.Web.Http
API。 可以使用此工具来帮助调试 web 服务和网络资源。 若要使用该工具,请选择调试 > 性能 Profiler。 选择网络,然后选择启动。 在应用中,浏览使用 Windows.Web.Http
的应用场景,然后选择“停止收集”生成报表。
在摘要视图中选择一个操作,查看更多详细信息。
有关详细信息,请参阅网络使用情况。
更深入了解如何将调试器附加到您的应用程序 (C#,c + +、 Visual Basic 中, F#)
若要附加到正在运行的应用,调试器将加载为想要调试的应用的相同内部版本生成的符号 (.pdb) 文件。 在某些情况下,了解符号文件的一些知识非常有用。 你可在模块窗口中检查 Visual Studio 如何加载符号文件。
打开模块窗口中的通过选择进行调试时调试 > Windows > 模块。 模块窗口可以告知调试器将视为用户代码,以及模块或我的代码,和符号加载模块的状态。 在大多数情况下,调试器会自动查找符号文件中的用户代码,但如果你想要单步执行 (或调试).NET framework 代码、 系统代码或第三方库代码,将执行其他步骤才能获取正确的符号文件。
你可以直接在模块窗口中右键单击并选择加载符号来加载符号信息。
有时,应用开发人员发布的应用不包含匹配的符号文件 (为了减少占用的空间),但会为内部版本保留一份匹配的符号文件,用于以后调试发布版本。
了解如何调试器如何区分用户代码,请参阅仅我的代码。 若要了解有关符号文件的详细信息,请参阅在 Visual Studio 调试器中指定符号 (.pdb) 和源文件。