Partilhar via


Sintaxe do ponto de interrupção

Os seguintes elementos de sintaxe podem ser usados ao criar um ponto de interrupção, seja através da janela Comando do Depurador ou através da interface gráfica do WinDbg.

Endereços nos pontos de paragem

Os pontos de interrupção suportam 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 nos métodos

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

  • Na sintaxe de expressão MASM, você pode indicar um método por dois pontos duplos 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 duplos.

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

Se quiser usar um comando de ponto de interrupção mais complexo, use a sintaxe da expressão MASM. Para obter mais informações sobre 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 novo).

Uma técnica mais versátil é usar a sintaxe @!"chars". Este é um escape especial no avaliador MASM que lhe permite fornecer texto arbitrário para a resolução de símbolos. Você deve começar com os três símbolos @!" e terminar com uma aspa ("). Sem essa sintaxe, não é possível usar espaços, colchetes angulares (<, >) ou outros caracteres especiais em nomes de símbolos no avaliador MASM. Esta sintaxe é exclusivamente para nomes, e não parâmetros. Modelos e sobrecargas são as principais fontes de símbolos que requerem essa notação de aspas. Você também pode definir o comando bu usando o @!" 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++(texto) para símbolos compatíveis com C++.

Pontos de interrupção em scripts

Os IDs de ponto de interrupção não precisam ser referenciados explicitamente. Em vez disso, pode-se usar uma expressão numérica que se resolve em um inteiro que corresponde a um identificador 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 se resolve em um inteiro que corresponde a um identificador 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 muda dependendo do valor de um pseudo-registro definido pelo usuário.

b?[@$t0]

Pseudo-registros de ponto de interrupção

Se quiseres referir-te a um endereço de ponto de interrupção numa expressão, podes usar um pseudo-registro com a sintaxe $bpNúmero, onde 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 do depurador, a resolução de ponto de interrupção ambígua agora é suportada. 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 em vários locais. Para obter mais informações, consulte Resolução de ponto de interrupção ambíguo.

Ver também

Usando pontos de interrupção

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

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