在Visual Studio调试器中使用断点
在源代码中设置断点
单击代码行旁边的最左边距。 您也可以选择行并按 九楼 ,选择 调试 > 切换断点 ,或单击鼠标右键并选择 断点 > 插入断点 。断点在左边空白处显示为一个红点。
断点是一个开关。 你可以点击它,按 九楼 ,或使用 调试 > 切换断点 删除或重新插入。 要禁用断点而不删除它,请将鼠标悬停在断点上或右键单击它,然后选择 禁用断点 。禁用的断点在左边距中显示为空点或 断点 窗口。 要重新启用断点,请将鼠标悬停在断点上或右键单击它,然后选择 启用断点 . 通过右键单击断点并选择适当的命令,或将鼠标悬停在断点上并选择 设置 偶像。
断点操作和跟踪点
断点条件
右键单击断点符号并选择 条件 (或按 中高音 + 九楼 , C ). 或者将鼠标悬停在断点符号上,选择 设置 图标,然后选择 条件 在中 断点设置 窗口。 您还可以右键单击代码行旁边的最左边距并选择 插入条件断点 从上下文菜单设置新的条件断点。 您还可以在 断点 窗口右击断点并选择 设置 ,然后选择 条件 在下拉列表中,选择 条件表达式 , 命中次数 ,或 过滤器 ,并相应地设置该值。 选择 关闭 或按 Ctrl键 + 输入 关闭 断点设置 窗口。 或者,从 断点 窗口,选择 好 啊 关闭对话框。
创建条件表达式
在条件表达式中使用对象ID(仅限C#和F#)
在创建对象后的某个位置在代码中设置断点。 开始调试,当执行在断点处暂停时,选择 调试 > 窗户 > 当地人 (或按 Ctrl键 + 中高音 + V(V) , L(左) )打开 当地人 窗口。 在中查找特定对象实例 当地人 窗口,右键单击它,然后选择 生成对象ID . 你应该看到 $ 在中加上一个数字 当地人 窗口。 这是对象ID。 在要调查的点上添加一个新断点; 例如,当要将对象添加到集合中时。 右键单击断点并选择 条件 . 在中使用对象ID 条件表达式 字段。 例如,如果变量 项目 是要添加到集合中的对象,请选择 是真的 和类型 项目==$ ,其中<n>是对象ID编号。 在将该对象添加到集合时,执行将中断。 要删除对象ID,请右键单击 当地人 窗口并选择 删除对象ID .
设置命中次数条件
设置过滤条件
MachineName=“名称” ProcessId=值 ProcessName=“name” ThreadId=值 ThreadName=“name”
设置函数断点
选择 调试 > 新断点 > 功能断点 ,或按 Ctrl键 + K(K) , B类 . 您还可以选择 新建 > 功能断点 在中 断点 窗口。 在 新功能断点 对话框中,在 函数名称 框。 缩小功能规范范围: 使用完全限定的函数名。 例子: 命名空间1.X类。 方法A() 添加重载函数的参数类型。 例子: 方法A(int,string) 使用“!” 符号来指定模块。 例子: App1.dll! 方法A 在本机C++中使用上下文运算符。 {函数,[module]}[+<从方法开始的行偏移量>] 例子: {方法A,App1.dll}+2
在 语言 下拉列表中,选择函数的语言。 选择 好 啊 .
使用内存地址设置函数断点(仅限本机C++)
在类的实例实例化后的某处设置断点。 查找实例的地址(例如, 0xcccccccc ). 选择 调试 > 新断点 > 功能断点 ,或按 Ctrl键 + K(K) , B类 . 将以下内容添加到 函数名称 框中,然后选择 C类++ 语言。 (((my_class*)0xccccccc)->我的方法
设置数据断点(.NET Core 3.x或.NET 5+)
在一个。 NET核心或。 NET5+项目,启动调试,并等待到达断点。 在 汽车 , 手表 ,或 当地人 窗口中,右键单击属性并选择 值更改时中断 在上下文菜单中。
在工具提示、“局部变量”、“自动”或“监视”窗口中不可展开的特性 静态变量 具有DebuggerTypeProxy属性的类 结构内部的字段
设置数据断点(仅限本机C++)
在C++项目中,启动调试,并等待到达断点。 上 调试 菜单,选择 新断点 > 数据断点 . 您还可以选择 新建 > 数据断点 在中 断点 窗口或右键单击 汽车 , 手表 ,或 当地人 窗口并选择 值更改时中断 在上下文菜单中。 在 地址 框中,键入内存地址或计算为内存地址的表达式。 例如,键入 &阿瓦尔 当变量的内容 阿瓦尔 变化。 在 字节计数 下拉列表中,选择您希望调试器监视的字节数。 例如,如果您选择 4 ,调试器将监视从开始的四个字节 &阿瓦尔 如果这些字节中的任何一个改变了值,则中断。
未被调试的进程写入内存位置。 内存位置在两个或多个进程之间共享。 内存位置在内核中更新。 例如,如果内存传递给32位Windows 读取文件 函数,内存将从内核模式更新,因此调试器在更新时不会中断。 其中,监视表达式在32位硬件上大于4个字节,在64位硬件上超过8个字节。 这是x86体系结构的一个限制。
数据断点取决于特定的内存地址。 变量的地址会从一个调试会话更改到下一个,因此在每个调试会话结束时都会自动禁用数据断点。 如果在局部变量上设置数据断点,则在函数结束时该断点仍处于启用状态,但内存地址不再适用,因此断点的行为是不可预测的。 如果在局部变量上设置数据断点,则应在函数结束之前删除或禁用断点。
数据断点硬件限制
设置依赖断点
将鼠标悬停在断点符号上,选择 设置 图标,然后选择 仅在命中以下断点时启用 在“断点设置”窗口中。 在下拉列表中,选择希望当前断点依赖的前提断点。
右键单击代码行旁边的最左边距并选择 插入从属断点 从上下文菜单中选择。
如果应用程序中只有一个断点,则依赖断点不起作用。 如果先决断点被删除,则相关断点将转换为普通行断点。
设置临时断点
将鼠标悬停在断点符号上,选择 设置 图标,然后选择 点击后删除断点 在“断点设置”窗口中。 选择 关闭 或按 Ctrl+Enter键 以关闭“断点设置”窗口。 或者,从“断点”窗口中选择 好 啊 关闭对话框。
右键单击代码行旁边的最左边距并选择 插入临时断点 从上下文菜单中选择。
在“断点”窗口中管理断点
断点标签
要向断点添加标签,请右键单击源代码中的断点或 断点 窗口,然后选择 编辑标签 。添加新标签或选择现有标签,然后选择 好 啊 . 对中的断点列表进行排序 断点 窗口,方法是选择 标签 , 条件 ,或其他列标题。 您可以通过选择来选择要显示的列 显示列 在工具栏中。
导出和导入断点
要将单个断点导出到XML文件,请右键单击源代码中的断点或 断点 窗口,然后选择 导出 或 导出选定的 。选择导出位置,然后选择 保存 。默认位置是解决方案文件夹。 要导出多个断点,请在 断点 窗口中,选择断点旁边的框,或在 搜索 字段。 选择 导出与当前搜索条件匹配的所有断点 图标,然后保存文件。 要导出所有断点,请取消选择所有框并保留 搜索 字段空白。 选择 导出与当前搜索条件匹配的所有断点 图标,然后保存文件。 要导入断点,请在 断点 窗口中,选择 从文件导入断点 图标,导航到XML文件位置,然后选择 正常开放 .
从调试器窗口设置断点
在“调用堆栈”窗口中设置断点
要打开 调用堆栈 窗口中,调试期间必须暂停。 选择 调试 > 窗户 > 调用堆栈 ,或按 Ctrl键 + 中高音 + C . 在 调用堆栈 窗口中,右键单击调用函数并选择 断点 > 插入断点 ,或按 九楼 . 在调用堆栈的左边距中,函数调用名称旁边会出现一个断点符号。
在“反汇编”窗口中设置断点
要打开 拆卸 窗口中,调试期间必须暂停。 选择 调试 > 窗户 > 拆卸 ,或按 Ctrl键 + 中高音 + D类 . 在 拆卸 窗口中,单击要中断的指令的左边距。您也可以选择它并按 九楼 ,或右键单击并选择 断点 > 插入断点 .
相关内容
反馈