断点语法

通过调试器命令窗口或 WinDbg 图形界面创建断点时,可以使用以下语法元素。

断点中的地址

断点支持多种地址语法,包括虚拟地址、函数偏移量和源行号。 例如,可以使用以下命令中的任何一个设置断点:

0:000> bp 0040108c
0:000> bp main+5c
0:000> bp `source.c:31`

有关此语法的详细信息,请参阅数字表达式语法源行语法和单个命令主题。

方法断点

如果要在 MyClass 类的 MyMethod 方法上放置断点,可以使用两种不同的语法:

  • 在 MASM 表达式语法中,可以通过双冒号或双下划线来指示方法。

    0:000> bp MyClass::MyMethod 
    0:000> bp MyClass__MyMethod 
    
  • 在 C++ 表达式语法中,必须通过双冒号来指示方法。

    0:000> bp @@( MyClass::MyMethod ) 
    

如果要使用更复杂的断点命令,应使用 MASM 表达式语法。 有关表达式语法的详细信息,请参阅计算表达式

使用复杂的 MASM 表达式的断点

若要对复杂函数(包括包含空格的函数以及 C++ 公共类的成员)设置断点,请将表达式括在括号中。 例如,使用 bp (??MyPublic)bp (operator new)

更通用的技术是使用 @!"chars" 语法。 这是 MASM 计算器中的一种特殊转义,可用于提供任意文本进行符号解析。 必须以 @!" 这三个符号开头,最后加上引号 (")。 如果没有此语法,则不能在 MASM 计算器中的符号名称中使用空格、尖括号(<、 >)或其他特殊字符。 此语法专用于名称,而不是参数。 模板和重载是需要此引号表示法的符号的主要来源。 还可以使用 @!"chars" 语法设置 bu 命令,如下面的代码示例所示。

0:000> bu @!"ExecutableName!std::pair<unsigned int,std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> > >::operator="

在此示例中,ExecutableName 是可执行文件的名称。

此转义语法对 C++ (例如重载运算符)比对 C 更有用,因为 C 函数名称中没有空格(或特殊字符)。 但是,由于 .NET Framework 中大量使用重载,此语法对于许多托管代码也很重要。

若要在 C++ 语法中的任意文本上设置断点,请使用 bu @@c++ (text) 作为与 C++ 兼容的符号。

脚本中的断点

断点 ID 不必显式引用。 相反,可以使用解析为对应于断点 ID 的整数的数字表达式。 若要指示应将表达式解释为断点,请使用以下语法。

b?[Expression]

在此语法中需要方括号,Expression 代表解析为与断点 ID 对应的整数的任何数值表达式。

此语法允许调试器脚本以编程方式选择断点。 在以下示例中,断点会根据用户定义的伪寄存器的值而更改。

b?[@$t0]

断点伪寄存器

如果要在表达式中引用断点地址,则可以将pseudo-register $bp Number 语法一起使用,其中 Number 是断点 ID。 有关此语法的详细信息,请参阅伪寄存器语法。

不明确的断点解析

在调试器引擎的 10.0.25310.1001 版本及更高版本中,目前支持不明确的断点解析。 不明确的断点允许调试器在某些断点表达式解析为多个位置的特定情况下设置断点。 有关详细信息,请参阅不明确的断点解析

另请参阅

使用断点

断点语法

bp、bu、bm(设置断点)

无法解析的断点(bu 断点)