ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#学习笔记——调试

2021-05-19 14:03:43  阅读:196  来源: 互联网

标签:窗口 C# 代码 笔记 线程 断点 调试 调试器


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

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

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

引脚数据提示

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

固定数据提示

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

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

编辑并继续调试

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

编辑XAML代码并继续调试

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

调试难以重现的问题

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

创建条件断点

  1. 右键单击断点图标(红色球),然后选择条件。

  2. 在“断点设置”窗口中,键入一个表达式。

    条件断点

  3. 如果您对其他类型的条件感兴趣,请在“断点设置”对话框中选择“过滤器”而不是“条件表达式”,然后按照过滤器提示进行操作。

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

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

更改执行流程

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

移动执行指针

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

 警告

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

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

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

创建对象ID

  1. 在要跟踪的变量附近设置一个断点。

  2. 启动调试器(F5)并在断点处停止。

  3. 在“本地”窗口中找到变量(“调试”>“ Windows”>“本地”),右键单击该变量,然后选择“创建对象ID”。

    创建一个对象ID

  4. 您应该在“本地”窗口中看到一个$加上一个数字。此变量是对象ID。

  5. 右键单击对象ID变量,然后选择添加监视。

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

查看函数的返回值

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

汽车视窗

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

立即窗口

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

在可视化器中检查字符串

使用字符串时,查看整个格式化的字符串可能会有所帮助。要查看纯文本,XML,HTML或JSON字符串,将鼠标可视化图标悬停在包含字符串值的变量上时,请单击放大镜图标。

打开一个字符串可视化器

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

JSON字符串可视化工具

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

闯入处理异常的代码

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

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

例外设置对话框

调试死锁和竞争条件

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

在源代码中显示线程

  1. 调试时,单击“调试”工具栏中的“在源中显示线程”按钮。在源代码中显示线程

  2. 查看窗口左侧的装订线。在此行上,您看到一个类似于两个布料线程的线程标记图标 螺纹标记。线程标记指示线程在此位置停止。

    请注意,断点可能会部分隐藏线程标记。

  3. 将指针悬停在线程标记上。出现数据提示。DataTip会告诉您每个已停止线程的名称和线程ID号。

    您还可以在“并行堆栈”窗口中查看线程的位置。

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

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

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

在“模块”窗口中查看符号信息

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

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

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

标签:窗口,C#,代码,笔记,线程,断点,调试,调试器
来源: https://www.cnblogs.com/eve612/p/14784717.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有