Visual Studio 调试系列9 调试器提示和技巧
如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看。 即使在重新启动后,固定的变量也能保持不动。 要固定数据提示,请在鼠标悬停其上时单击固定图标。 你可以固定多个变量。
在 Visual Studio 支持的大多数语言中,你都可以在调试会话的过程中编辑代码,然后继续调试。 要使用此功能,请先在调试器中暂停,用鼠标点击进入代码,进行编辑,然后按 F5、F10 或 F11 键继续调试。
有关功能使用和功能限制的详细信息,请参阅编辑并继续。
如果在应用中重新实现特定状态很困难或很费时,可以考虑使用条件断点。 你可以使用条件断点并对其加以筛选,以免破坏应用代码,直到应用进入所需的状态(例如,变量正在存储错误数据的状态)。 你可以使用表达式、筛选器、命中次数等来设置条件。
创建条件断点
-
右键单击断点图标 (红色的球),然后选择条件。
-
在断点设置窗口中,键入一个表达式。
-
如果你对另一种类型的条件感兴趣,请在断点设置对话框中选择筛选器,而不是条件表达式,然后按照筛选器的提示操作。
有关C#,Visual Basic 和C++(C++仅 /CLI 代码),可以让调试程序要使用下列选项显示的信息DebuggerDisplay属性。 有关C++代码中,可以执行相同的 using Natvis 可视化。
让调试器暂停在某行代码上,用鼠标抓住左侧的黄色箭头指针。 将黄色箭头指针移动到代码执行路径中的其他点上。 然后通过 F5 键或步骤命令继续运行应用。
通过更改执行流,你可以进行测试不同代码执行路径或重新运行代码等操作,而无需重启调试器。
通过调试器窗口(如监视窗口)可以轻松查看变量。 但是,如果变量超出了监视窗口的范围,你可能会注意到它变成了灰色。在某些应用场景中,如果变量超出范围,变量的值甚至可能会发生变化,因此你可能需要密切关注它(例如,变量可能会被当做垃圾回收掉)。你可以在监视窗口中为该变量创建一个对象 ID 来跟踪这个变量。
创建对象 ID
-
在要跟踪的变量附近设置一个断点。
-
启动调试器 (F5),并在断点处停止。
-
在局部变量窗口(调试 > 窗口 > 局部变量)中找到该变量,右键单击该变量,然后选择创建对象 ID。
-
应该会在“局部变量” $ 窗口中看到 $ 窗口中设置断点来中断调用函数返回到的指令或行处的执行。 此变量是对象 id。
-
右键单击对象 ID 变量,然后选择添加监视。
有关详细信息,请参阅创建的对象 ID。
要查看函数的返回值,请在逐步执行代码时,查看自动窗口中显示的函数。 要查看函数的返回值,请确保你关注的函数已执行完毕(如果函数的调用目前处于停止状态,请按一下 F10 键)。 如果该窗口已关闭,请通过调试 > 窗口 > 自动窗口打开自动窗口。
此外,还可以在即时窗口中输入函数来查看返回值。 (通过调试 > 窗口 > 即时打开该窗口。)
此外,还可以在监视和即时窗口中使用伪变量,如 $ReturnValue
。
在使用字符串时,如果能看到完整的、带格式的字符串会很有帮助。 要查看纯文本、XML、HTML 或 JSON 字符串,请将鼠标悬停在包含字符串值的变量上,然后单击放大镜图标。
字符串可视化工具可以帮你确定字符串的格式是否正确,具体取决于字符串的类型。 例如,如果值字段为空,表明可视化工具类型未识别出该字符串。 有关详细信息,请参阅字符串可视化工具对话框。
对于几个其他类型如调试器窗口中显示的数据集和 DataTable 对象,还可以打开内置的可视化工具。
调试器会在未经处理的异常处中断代码。 但是,已处理的异常(例如 try/catch
块内发生的异常)也可能会造成错误,可能需要进一步调查。 可以将调试器配置为在已处理的异常处中断代码,方法是配置异常设置对话框中的选项。 要打开这个对话框,请选择调试 > 窗口 > 异常设置。
通过异常设置对话框,你可以让调试器在特定异常处中断代码。 在下图中,调试器会在发生 System.NullReferenceException
时中断代码。 有关详细信息,请参阅管理异常。
如果需要调试的问题对于多线程应用程序很常见,在调试时查看线程的位置,通常会有所帮助。 可使用源中显示线程按钮轻松完成此操作。
在源代码中显示线程
-
调试时,单击源中显示线程按钮中调试工具栏。
-
查看窗口左侧的滚动条。 在这一行,你可以看到线程标记图标 ,类似于两根细线。线程标记指示线程在此位置停止。
注意,线程标记可能被断点不完全遮挡。
-
将指针悬停在线程标记上。 屏幕上将显示数据提示。 数据提示将告诉你每个已停止线程的名称和线程 ID。
你还可以查看中的线程的位置并行堆栈窗口。
在 UWP 应用中,你可以分析使用 Windows.Web.Http
API执行的网络操作。 可以使用此工具来帮助调试 web 服务和网络资源。 若要使用该工具,请选择调试 > 性能探查器。 选择网络,然后选择启动。 在应用中,浏览使用 Windows.Web.Http
的应用场景,然后选择 停止收集 生成报表。
在摘要视图中选择一个操作,查看更多详细信息。
有关详细信息,请参阅网络使用情况。
若要附加到正在运行的应用,调试器将加载为想要调试的应用的相同内部版本生成的符号 (.pdb) 文件。 在某些情况下,了解符号文件的一些知识非常有用。 你可在模块窗口中检查 Visual Studio 如何加载符号文件。
在调试时,通过选择调试 > 窗口 > 模块 打开模块窗口。 模块窗口可以告诉你,调试器将哪些模块视为用户代码或我的代码,以及符号加载模块的状态。 在大多数情况下,调试器会自动为用户代码查找符号文件,但如果你想要单步跟踪 (或调试).NET framework 代码、系统代码或第三方库代码,必须执行其他步骤获取正确的符号文件。
你可以直接在模块窗口中右键单击并选择加载符号来加载符号信息。
有时,应用开发人员发布的应用不包含匹配的符号文件 (为了减少占用的空间),但会为内部版本保留一份匹配的符号文件,用于以后调试发布版本。
了解如何调试器如何区分用户代码,请参阅仅我的代码。 若要了解有关符号文件的详细信息,请参阅在 Visual Studio 调试器中指定符号 (.pdb) 和源文件。
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!