断点告诉调试器应用程序应该在某个点中断或暂停执行。当中断发生时,程序和调试器被称为处于中断模式。跟踪点是Visual Studio中的一个新调试器功能。跟踪点是具有与其关联的自定义操作的断点。当命中跟踪点时,调试器将执行指定的跟踪点操作,而不是中断程序执行。跟踪点的一个常见用途是在程序到达某个点时打印消息。您可以将跟踪点用于许多与使用跟踪相同的目的,但无需修改代码。另一个区别是,跟踪点只在调试器下运行时工作。
源窗口和反汇编窗口通过在左边距中显示名为glyph的符号来显示断点位置。下表描述了这些标志符号。如果将鼠标放在断点图示符上,则会出现一个断点提示,其中包含更多信息。此信息对于错误和警告断点特别有用。
Glyph |
Description |
---|---|
![]() |
正常断点。实心标志符号表示断点已启用。空心标志符号表示它已被禁用。 |
![]() |
高级断点。激活/禁用。符号+表示断点至少附加了一个高级功能(如条件、命中计数或筛选器)。 |
![]() |
映射断点。激活/禁用。断点在ASP/ASP.NET代码中设置并映射到相应HTML页面中的断点,或者在服务器端脚本文件中设置并映射到相应的客户端脚本文件。 |
![]() |
追踪点。激活/禁用。达到此点将执行指定的操作,但不会中断程序执行。 |
![]() |
高级跟踪点。激活/禁用。符号+表示跟踪点至少附加了一个高级功能(如条件、命中计数或筛选器)。 |
![]() |
映射跟踪点。激活/禁用。跟踪点在ASP/ASP.NET代码中设置,并映射到相应HTML页面中的跟踪点。 |
![]() |
断点或跟踪点错误。X表示由于错误条件,无法设置断点或跟踪点。 |
![]() |
断点或跟踪点警告。感叹号表示由于临时条件,无法设置断点或跟踪点。通常,这意味着断点或跟踪点位置的代码尚未加载。如果附加到进程并且未加载该进程的符号,则也可以看到。加载代码或符号时,将启用断点并更改图示符 |
最基本的断点是在源代码行或函数上设置的断点。注意:如果一个源文件中有超过64000行代码,则不会命中64000行之后的行上的断点。
有时,一行代码包含多个可执行语句。在这种情况下,可以在行上设置多个断点。包含当前选定断点的代码语句周围将出现一个框。此框可用于区分同一行代码上的多个断点。可以在“断点”窗口中选择断点,也可以单击“源”窗口中包含断点的语句。
如果您有VisualC++或VisualStudio,任何版本,您可以设置更高级的断点,创建具有高级特性的断点,并以更强大的方式使用断点。
可以在内存地址上设置断点,也就是地址断点。在C/C++中,可以设置一个在内存更改时命中的断点,也就是数据断点(仅限本机)。
过滤器、命中计数和条件是可以附加到任何类型断点(包括跟踪点)的高级功能。
在调试混合模式、本机和托管代码时,请避免在系统组件上设置断点。在混合模式调试期间在系统组件上设置断点可能会导致公共语言运行库中断,调试器停止响应。除非您单步执行调用,否则调试器不会自动附加到XML Web服务。这意味着在XML Web服务中设置的任何断点都不会被命中,除非您进入调用。如果尝试使用“开始调试”或“继续”来运行断点,而不是使用“单步执行”,则不会命中断点。
Visual Studio调试器提供了许多设置断点的方法。下面提供了两种设置简单断点的快速方法。
可以在“反汇编”窗口中的内存地址处设置断点。设置断点后,可以在“断点”窗口中编辑地址断点。先转到汇编窗口,然后进行下面的操作:
在“反汇编”窗口中,单击一行代码,然后单击“调试”菜单上的“切换断点”。
-或者-
右键单击一行代码,然后选择“插入断点”。
可以在函数的开头或函数中的指定位置设置断点。对于脚本,只能在函数的开头设置断点。
此功能不适用于Transact-SQL、Internet Explorer中的脚本或ASP。本主题描述如何使用调用堆栈窗口在对函数的特定调用上设置断点。断点在函数调用中的下一个可执行指令处设置。如果要在函数本身上设置断点,而不是在对函数的特定调用上设置断点。
在“调用堆栈”窗口中,在中断模式下,右键单击函数调用,然后单击快捷菜单(断点子菜单)上的“插入断点”。断点符号出现在函数调用名称旁边的左边距中。查看断点属性时,此断点显示为地址断点,其内存位置与函数中的下一个可执行指令相对应。
Visual Studio支持每个解决方案最多四个数据断点。
在源窗口、反汇编窗口或调用堆栈窗口中,断点显示为红色符号或标志符号。
在“断点”窗口中,右键单击断点,然后单击快捷菜单上的“删除”。
-或者-
在源窗口或反汇编窗口中,单击断点图示符。
在“调试”菜单中,单击“删除所有断点”。
在“源”、“反汇编”或“调用堆栈”窗口中,右键单击包含断点标志符号的行,指向“断点”,然后单击“启用断点”或“禁用断点”。
-或者-
在“断点”窗口中,选中或清除断点旁边的复选框。
在“调试”菜单中,单击“启用所有断点”。
在第一次到达断点之前,调试器不会计算表达式。如果为本机代码选择“已更改”,则调试器不会将条件的第一次求值视为更改,因此不会在表达式的第一次求值时命中断点。如果为托管代码选择“已更改”,则在选择“已更改”后的第一次求值时将命中断点。
命中计数跟踪断点被命中的次数。默认情况下,每次遇到断点时执行都会中断。您可以选择:
如果要跟踪断点被命中但从不中断执行的次数,可以将命中计数设置为非常高的值,以便从不命中断点。指定的命中计数仅为调试会话保留。调试会话结束时,命中计数重置为零。
断点筛选器将断点的行为限制为指定的计算机、进程和线程。当调试分布在多个处理器上的并行应用程序时,断点筛选器可能很有用。
跟踪点是一种使用断点的新方法。跟踪点是具有与其关联的自定义操作的断点。当跟踪点被命中时,它会导致调试器执行指定的操作,而不是(或除此之外)中断程序执行。您可以用两种不同的方式创建跟踪点:
在源窗口中,单击要设置跟踪点的行,然后在快捷菜单上选择“插入跟踪点”。
“命中时”对话框出现。它包含两个文本框,您可以在其中输入自定义操作:打印消息和运行宏。
此时,您可以接受预选的跟踪点设置,或按如下方式修改它们:
要创建将消息打印到输出窗口的跟踪点,请选择打印消息并在相应的文本框中输入消息文本。通过使用打印消息,可以将跟踪点用于与使用跟踪类相同的目的,但无需修改代码。
可以使用DebuggerDisplayAttribute语法包含编程信息。例如:
在函数{$FUNC}中,在线程{$TID}上
-或者-
使用的变量:{varName},函数名:{function name($FUNC)}
您可以使用“命中断点时”对话框中显示的任何关键字。此外,还可以使用对话框中未显示的其他两个关键字:$TICK插入当前CPU计时计数,而$FILEPOS插入当前文件位置。当“命中断点时”对话框打开时,“打印消息”中将显示默认消息。如果要接受此消息,请单击“确定”。要运行Visual Studio自动化模型宏,请选择“运行宏”,然后从下拉列表中选择宏。当您选择打印消息或运行宏时,“继续执行”复选框将变为活动状态。如果不希望跟踪点中断程序的执行,请选择“继续执行”。
在“源”、“反汇编”或“调用堆栈”窗口中,右键单击断点标志符号并选择“操作”。
-或者-
在“断点”窗口中,右键单击断点图示符并选择“设置”。
对话框出现。
如果项目中的两个或多个源文件具有相同的名称,则调试器可能无法确定断点设置在哪个文件中。如果创建的模块与要链接的调试库的组件同名,则通常会发生这种情况。要解决此问题,请输入源文件的完整路径。可以在“文件断点”对话框中更改文件路径名。在其他情况下,调试器可能找不到对应于断点的源文件,即使源文件存在。如果源文件已更改,并且源与正在调试的代码不再匹配,则会发生这种情况。如果希望Visual Studio显示与正在调试的版本不匹配的源代码,请在“选项”对话框的“常规”类别的“调试”节点中清除“仅使用与原始版本完全匹配的源代码”选项。也可以通过选中“文件断点”对话框中的“允许源代码与原始版本不同”来绑定断点。
原文:https://www.cnblogs.com/yilang/p/12460517.html