本文可帮助你解决使用“值更改时中断”时发生的常见错误。
诊断“无法设置数据断点”错误
重要
.NET Core 3.0、.NET 5.0.3 及更高版本中支持托管数据断点。 可以在 此处下载最新版本。
使用托管数据断点时,可能会出现以下错误。 本文介绍这些错误发生的原因,并提供可能的解决方案或解决方法来解决这些错误。
目标进程使用的 .NET 版本不支持数据断点。 数据断点需要 .NET Core 3.x 或 .NET 5.0.3+,在 x86 或 x64 上运行。
从 .NET Core 3.0 开始支持托管数据断点。 .NET Framework、3.0 以下的 .NET Core 版本或 5.0.3 下的 .NET 版本目前不受支持。
解决方法:若要解决此错误,请将项目升级到 .NET Core 3.x 或 .NET 5+。
无法在托管堆上找到该值,并且无法跟踪。
在堆栈上声明的变量。
不支持为堆栈上创建的变量设置数据断点,因为这些变量在函数退出后将无效。
解决方法:在使用变量的行上设置断点。
未从下拉菜单展开的变量上的“值更改时中断”。
调试器在内部需要知道包含要跟踪的字段的对象。垃圾回收器可能会在堆中移动对象,因此调试器需要知道保存要跟踪的变量的对象。
解决方法:如果位于要设置数据断点的对象内的方法,请执行以下步骤:
a. 导航到包含你感兴趣的对象的方法的框架。
b. 打开“ 局部变量”、“ 自动”或 “监视 ”窗口。
c. 找到对象并将其展开以显示其字段。
d. 右键单击要在其中设置数据断点的字段,然后在上下文菜单中的值发生更改时选择“中断”。
静态字段或静态属性不支持数据断点。
目前不支持静态字段和属性。 如果对此功能感兴趣,请提供 反馈。
无法跟踪结构的字段和属性。
目前不支持结构字段和属性。 如果对此功能感兴趣,请提供 反馈。
属性值已更改,无法再跟踪。
属性可能会更改它在运行时的计算方式。 如果发生这种情况,则属性所依赖的变量数将增加,并可能超过硬件限制。 有关详细信息,请参阅以下错误:“属性依赖于比硬件跟踪的内存多。
该属性依赖于比硬件可以跟踪的内存多。
每个体系结构都有一组字节数和硬件数据断点,它可以支持该断点,以及要设置数据断点的属性已超过该限制。 请参阅 数据断点硬件限制 表,了解可用的硬件支持的数据断点和字节数,这些断点和字节可用于所使用的体系结构。
解决方法:在属性中对可能发生更改的值设置数据断点。
使用旧 C# 表达式计算器时不支持数据断点。
数据断点仅在非旧 C# 表达式计算器中受支持。
解决方案:若要禁用旧 C# 表达式计算器,请执行以下步骤:
- 转到 Visual Studio 中的“调试” 菜单。
- 选择“选项”。
- 导航到 “调试>常规”。
- 取消选中 “使用旧 C# 和 VB 表达式计算器 ”选项。
类 X 具有自定义调试器视图,它阻止对特定于它的数据使用数据断点。
数据断点仅在目标进程(已调试的应用程序)创建的内存上受支持。 设置数据断点的内存已被标记为可能由 DebuggerTypeProxy 属性创建的对象或不属于目标进程的其他内容所拥有。
解决方法:展开 原始视图 而不是 对象的 DebuggerTypeProxy 视图,然后设置数据断点。 这可以保证数据断点不在属性创建的对象拥有的内存中
DebuggerTypeProxy
。
数据断点硬件限制
程序运行的体系结构(平台配置)具有有限数量的可用硬件数据断点。 下表指明了每个体系结构可使用的寄存器数。
体系结构 | 硬件支持的数据断点数 | 最大字节大小 |
---|---|---|
x86 | 4 | 4 |
X64 | 4 | 8 |
ARM | 1 | 4 |
ARM64 | 2 | 8 |
提供反馈
有关此功能的任何问题或建议,请通过 IDE 或开发者社区中的帮助>发送反馈>报告问题告知我们。