Partilhar via


Sintaxe de ponto de interrupção

Os elementos de sintaxe a seguir podem ser usados ao criar um ponto de interrupção, seja pela janela Comando do Depurador ou pela interface gráfica do WinDbg.

Endereços em pontos de interrupção

Os pontos de interrupção dão suporte a muitos tipos de sintaxe de endereço, incluindo endereços virtuais, deslocamentos de função e números de linha de origem. Por exemplo, você pode usar qualquer um dos seguintes comandos para definir pontos de interrupção:

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

Para obter mais informações sobre essa sintaxe, consulte Sintaxe de expressão numérica, Sintaxe de linha de origem e os tópicos de comando individuais.

Pontos de interrupção em métodos

Se você quiser colocar um ponto de interrupção no método MyMethod na classe MyClass , poderá usar duas sintaxes diferentes:

  • Na sintaxe da expressão MASM, você pode indicar um método por dois-pontos ou por um sublinhado duplo.

    0:000> bp MyClass::MyMethod 
    0:000> bp MyClass__MyMethod 
    
  • Na sintaxe de expressão C++, você deve indicar um método por dois-pontos.

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

Se você quiser usar um comando de ponto de interrupção mais complexo, use a sintaxe de expressão MASM. Para obter mais informações sobre a sintaxe de expressão, consulte Avaliando expressões.

Pontos de interrupção usando expressões MASM complicadas

Para definir um ponto de interrupção em funções complicadas, incluindo funções que contêm espaços, bem como um membro de uma classe pública C++, coloque a expressão entre parênteses. Por exemplo, use bp (?? MyPublic) ou bp (operador new).

Uma técnica mais versátil é usar o @!" sintaxe chars". Esse é um escape especial no avaliador MASM que permite que você forneça texto arbitrário para resolução de símbolos. Você deve começar com os três símbolos @!" e terminar com uma aspa ("). Sem essa sintaxe, você não pode usar espaços, colchetes angulares (<, >), ou outros caracteres especiais em nomes de símbolo no avaliador MASM. Essa sintaxe é exclusivamente para nomes e não para parâmetros. Modelos e sobrecargas são as principais fontes de símbolos que exigem essa notação de aspas. Você também pode definir o comando bu usando o @!" sintaxe chars", como mostra o exemplo de código a seguir.

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

Neste exemplo, ExecutableName é o nome de um arquivo executável.

Essa sintaxe de escape é mais útil para C++ (por exemplo, operadores sobrecarregados) em vez de C porque não há espaços (ou caracteres especiais) em nomes de função C. No entanto, essa sintaxe também é importante para muitos códigos gerenciados devido ao uso considerável de sobrecargas no .NET Framework.

Para definir um ponto de interrupção em texto arbitrário na sintaxe C++, use bu @@c++(text) para símbolos compatíveis com C++.

Pontos de interrupção em scripts

As IDs de ponto de interrupção não precisam ser referenciadas explicitamente. Em vez disso, você pode usar uma expressão numérica que resolve para um inteiro que corresponde a uma ID de ponto de interrupção. Para indicar que a expressão deve ser interpretada como um ponto de interrupção, use a sintaxe a seguir.

b?[Expression]

Nessa sintaxe, os colchetes são necessários e Expression significa qualquer expressão numérica que seja resolvida para um inteiro que corresponda a uma ID de ponto de interrupção .

Essa sintaxe permite que os scripts do depurador selecionem programaticamente um ponto de interrupção. No exemplo a seguir, o ponto de interrupção é alterado dependendo do valor de um pseudo-registro definido pelo usuário.

b?[@$t0]

Pseudo-registros de ponto de interrupção

Se você quiser se referir a um endereço de ponto de interrupção em uma expressão, poderá usar um pseudo-registro com a sintaxe número $bp, em que Número é a ID do ponto de interrupção. Para obter mais informações sobre essa sintaxe, consulte Pseudo-Register Sintaxe.

Resolução ambígua do ponto de interrupção

Na versão 10.0.25310.1001 e posterior do mecanismo de depurador, agora há suporte para a resolução ambígua do ponto de interrupção. Pontos de interrupção ambíguos permitem que o depurador defina pontos de interrupção em determinados cenários em que uma expressão de ponto de interrupção é resolvida para vários locais. Para obter mais informações, consulte Resolução de ponto de interrupção ambíguo.

Confira também

Usando pontos de interrupção

Sintaxe de ponto de interrupção

bp, bu, bm (Definir ponto de interrupção)

Pontos de interrupção não resolvidos (bu Breakpoints)