专栏首页c#学习笔记引脚数据提示编辑代码并继续调试(C#,VB,C ++)编辑XAML代码并继续调试调试难以重现的问题配置数据以显示在调试器中更改执行流程跟踪范围外的对象(C#,Visual Basic)查看函数的返回值

引脚数据提示编辑代码并继续调试(C#,VB,C ++)编辑XAML代码并继续调试调试难以重现的问题配置数据以显示在调试器中更改执行流程跟踪范围外的对象(C#,Visual Basic)查看函数的返回值

官网:https://docs.microsoft.com/en-us/visualstudio/debugger/debugger-tips-and-tricks?view=vs-2019

了解Visual Studio中调试器的生产力提示和技巧

  • 2018年6月15日
  • 7分钟阅读

阅读本主题,以了解一些有关Visual Studio调试器的生产力提示和技巧。要了解调试器的基本功能,请参阅先了解调试器。在本主题中,我们涵盖了功能导览中未包括的一些区域。

引脚数据提示

如果在调试时经常将鼠标悬停在数据提示上,则可能需要将数据提示固定在变量上,以便快速访问。即使重新启动后,变量仍保持固定状态。要固定数据提示,请将鼠标悬停在其上方时,单击“固定”图标。您可以固定多个变量。

编辑代码并继续调试(C#,VB,C ++)

在Visual Studio支持的大多数语言中,您可以在调试会话的中间编辑代码,然后继续进行调试。要使用此功能,请在调试器中暂停时用光标单击代码,进行编辑,然后按F5,F10或F11继续调试。

有关使用功能和功能限制的更多信息,请参见“编辑并继续”

编辑XAML代码并继续调试

要在调试会话期间修改XAML代码,请参阅使用XAML Hot Reload编写和调试运行的XAML代码

调试难以重现的问题

如果在您的应用程序中重新创建特定状态很困难或很耗时,请考虑使用条件断点是否有帮助。您可以使用条件断点和过滤断点来避免闯入应用程序代码,直到应用程序进入所需的状态(例如,变量存储错误数据的状态)。您可以使用表达式,过滤器,命中数等设置条件。

创建条件断点

  1. 右键单击断点图标(红色球),然后选择条件。
  2. 在“断点设置”窗口中,键入一个表达式。
  1. 如果您对其他类型的条件感兴趣,请在“断点设置”对话框中选择“过滤器”而不是“条件表达式”,然后按照过滤器提示进行操作。

配置数据以显示在调试器中

对于C#,Visual Basic和C ++(仅C ++ / CLI代码),您可以使用DebuggerDisplay属性告诉调试器显示哪些信息。对于C ++代码,您可以使用Natvis可视化工具执行相同的操作。

更改执行流程

在调试器停在一行代码上的情况下,使用鼠标抓住左侧的黄色箭头指针。将黄色箭头指针移到代码执行路径中的其他点。然后,使用F5或step命令继续运行该应用程序。

通过更改执行流程,您可以执行诸如测试不同代码执行路径或重新运行代码之类的操作,而无需重新启动调试器。

警告

通常,您需要谨慎使用此功能,并且在工具提示中会看到警告。您可能还会看到其他警告。移动指针不能将您的应用恢复到较早的应用状态。

跟踪范围外的对象(C#,Visual Basic)

使用诸如“监视”窗口之类的调试器窗口可以轻松查看变量。但是,当变量在“监视”窗口中超出范围时,您可能会注意到它是灰色的。在某些应用程序场景中,即使变量超出范围,变量的值也可能会更改,您可能需要仔细观察(例如,变量可能会被垃圾回收)。您可以通过在“监视”窗口中为其创建对象ID来跟踪变量。

创建对象ID

  1. 在要跟踪的变量附近设置一个断点。
  2. 启动调试器(F5)并在断点处停止。
  3. 在“本地”窗口中找到变量(“调试”>“ Windows”>“本地”),右键单击该变量,然后选择“创建对象ID”。
  1. 您应该在“本地”窗口中看到一个$加上一个数字。此变量是对象ID。
  2. 右键单击对象ID变量,然后选择添加监视。

有关更多信息,请参见创建对象ID

查看函数的返回值

要为您的功能,看看出现在该功能查看返回值的汽车窗口,而你是单步执行代码。要查看某个函数的返回值,请确保您感兴趣的函数已经执行(如果您当前在函数调用中停止,请按一次F10键)。如果窗口关闭,使用调试>窗口>汽车,打开汽车的窗口。

另外,您可以在立即窗口中输入函数以查看返回值。(使用调试> Windows>立即打开它。)

您还可以在“监视并立即”窗口中使用伪变量,例如。$ReturnValue

在可视化器中检查字符串

使用字符串时,查看整个格式化的字符串可能会有所帮助。要查看纯文本,XML,HTML或JSON字符串,将鼠标

悬停在包含字符串值的变量上时,请单击放大镜图标。

字符串可视化工具可以帮助您找出字符串是否格式错误,具体取决于字符串类型。例如,空白的“值”字段表示可视化器类型无法识别该字符串。有关更多信息,请参见String Visualizer对话框

对于出现在调试器窗口中的其他一些类型,例如DataSet和DataTable对象,您也可以打开内置的可视化器。

闯入处理异常的代码

调试器会在未处理的异常情况下闯入您的代码。但是,已处理的异常(例如,在try/catch块中发生的异常)也可能是错误的来源,您可能想调查它们的发生时间。您还可以通过配置“异常设置”对话框中的选项,将调试器配置为闯入处理异常的代码。通过选择“调试”>“ Windows”>“异常设置”打开此对话框。

通过“异常设置”对话框,您可以告诉调试器针对特定异常闯入代码。在下图中,只要System.NullReferenceException出现a,调试器就会侵入您的代码。有关更多信息,请参见管理异常

调试死锁和竞争条件

如果您需要调试多线程应用程序常见的问题,则通常有助于在调试时查看线程的位置。您可以使用在源代码中显示线程按钮轻松完成此操作。

在源代码中显示线程

  1. 调试时,单击“调试”工具栏中的“在源中显示线程”按钮。
  1. 查看窗口左侧的装订线。在此行上,您看到一个类似于两个布料线程的线程标记图标

。线程标记指示线程在此位置停止。 请注意,断点可能会部分隐藏线程标记。

  1. 将指针悬停在线程标记上。出现数据提示。DataTip会告诉您每个已停止线程的名称和线程ID号。 您还可以在“并行堆栈”窗口中查看线程的位置。

更加熟悉调试器如何附加到您的应用程序(C#,C ++,Visual Basic,F#)

要附加到正在运行的应用程序,调试器将加载与要调试的应用程序完全相同的内部版本生成的符号(.pdb)文件。在某些情况下,对符号文件的一些了解可能会有所帮助。您可以使用“模块”窗口检查Visual Studio如何加载符号文件。

在调试时,通过选择“调试”>“ Windows”>“模块”,打开“模块”窗口。“模块”窗口可以告诉您调试器将哪些模块视为用户代码或“我的代码”,以及该模块的符号加载状态。在大多数情况下,调试器会自动查找用户代码的符号文件,但是如果您要进入(或调试).NET代码,系统代码或第三方库代码,则需要采取额外的步骤来获取正确的符号文件。

您可以通过右键单击并选择“加载符号”,直接从“模块”窗口中加载符号信息。

有时,应用程序开发人员在交付应用程序时没有匹配的符号文件(以减少占用空间),但保留了匹配的符号文件的副本以进行构建,以便他们以后可以调试发行的版本。

要了解调试器如何将代码分类为用户代码,请参见Just My Code。要查找有关符号文件的更多信息,请参见Visual Studio调试器中的指定符号(.pdb)和源文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Visual Studio 调试系列9 调试器提示和技巧

    如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看。 即使在重新启动后,固定的变量也能保持不动。 要固定数据提示,请在鼠标...

    张传宁IT讲堂
  • Visual Studio 2017 15.8 版发行说明

    显著提升了在运行包含多个测试项目的大型解决方案期间的性能。 在我们的实验室中,超过 10,000 个 MSTest 的解决方案执行单个测试的速度提高了 82%!

    Edi Wang
  • 宇宙第一 IDE 叕发布新版了

    Visual Studio 2022 正式版于发布。新版本带有 go-live 许可证,可供生产使用。在 Visual Studio 2019 的基础上,新版集...

    Java技术精选
  • 曾是最流行的语言之一,Visual Basic 28年兴衰记

    这是一篇暴露年龄的文章。为什么这么说?因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月,Micro...

    用户5807183
  • Visual Studio 调试系列3 断点

    断点是开发人员的工具箱中最重要的调试技术之一。 若要暂停调试程序执行所需的位置设置断点。 例如,你可能想要查看代码变量的状态或查看调用堆栈的某些断点。

    张传宁IT讲堂
  • .NET程序员必备的58个提高效率工具

    1. Visual Studio Visual Studio Productivity Power tool:Visual Studio 专业版(及以上)的扩展...

    BestSDK
  • DotNet 资源大全中文版(Awesome最新版)

    Awesome系列的.Net资源整理。awesome-dotnet是由quozd发起和维护。内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、I...

    张果
  • 托管C++、C++/CLI、CLR

    拾点阳光
  • Visual Studio 调试系列2 基本调试方法

    在 Visual Studio 上下文中,当调试应用时,这通常意味着你在附加了调试器的情况下(即在调试器模式下)运行应用程序。 执行此操作时,调试器在运行过程中...

    张传宁IT讲堂
  • 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐...

    小曾看世界
  • .Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内

    工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管...

    葡萄城控件
  • 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐...

    梁规晓
  • Python3和Go成最大赢家?一张主流编程语言变迁图讲清程序员迁移模式

    导读:本文作者以自己作为程序员的角度出发,绘制了一个主流编程语言的变迁图,用以表示程序员在不同语言之间的切换路径。也就是当程序员开始使用编程语言 A,下一个最有...

    华章科技
  • ASP.NET 调味品:AJAX

    Karl Seguin 适用于: AJAX(异步 JavaScript 和 XML) Microsoft AJAX.NET Microsoft ASP.NET ...

    张善友
  • Visual Studio 2008 每日提示(三十一)

    #311、按Shift+F11跳出函数 原文链接:You can press Shift+F11 to step out of a function 操作步...

    Jianbo
  • iOS 逻辑自动化测试实践

    在本文中,以iOS手机管家为例子,逻辑自动化测试的范围选定为 ObjectController 文件夹中的类,此文件夹中的类文件均为与 UI 无关的业务逻辑类。

    腾讯移动品质中心TMQ
  • 程序设计语言介绍及调试技巧

    什么是计算机程序? 答:所谓的程序就是计算机能识别和执行的指令,每一条指令使计算机执行特定的操作,程序和指令是计算机系统中最基本的概念。

    WeiyiGeek
  • Rust 语言入门

    最近的一项 Stack Overflow 调查 发现,近 80% 的受访者都喜欢或希望使用 Rust 语言进行开发。这个数字令人难以置信!那么 Rust 有什么...

    疯狂的技术宅
  • Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS201...

    葡萄城控件

扫码关注云+社区

领取腾讯云代金券