Pergunta

fãs

WinDbg afirmam que é muito poderoso e eu tendo a concordar. Mas quando se trata de depuração contêineres STL, estou sempre preso. Se a variável está na pilha, a extensão !stl às vezes figuras-lo, mas quando um recipiente com um tipo complexo (por exemplo std::vector<TemplateField, std::allocator<TemplateField> >) é na pilha ou parte de alguma outra estrutura, eu só não sei como visualizar o seu conteúdo .

Agradecemos quaisquer sugestões, ponteiros.

Foi útil?

Solução

Você também pode querer dar a este href="http://www.nynaeve.net/?p=7" rel="nofollow noreferrer"> extensão uma tentativa. É uma biblioteca chamada SDbgExt, desenvolvido pela Skywing .

Outras dicas

muitas vezes eu achar depurador suporte para tipos de dados STL inadequadas. Por esta razão eu estou cada vez mais usando estruturas de registo e declarações madeireiras . Eu costumava pensar que estes são para pessoas que não podem usar um depurador, mas agora percebo que eles oferecem valor real. Eles permitem que você incorpore conhecimento depuração portátil em seu código e mantê-lo juntamente com o código. Em contraste, o trabalho que você faz no depurador é tipicamente efêmero.

extensão Python para WinDbg (pykd) Tem trecho de stlp.py que pode despejar o conteúdo do mapa.
Atualmente ele suporta implementação mapa STLport. Testado em x86 e x64. Este artigo demonstra como usá-lo (a sua em russo , mas, os exemplos são auto-explicativo).

Eu tive exatamente a mesma pergunta há algum tempo. Minha resposta é que Visual Studio é verdadeiramente uma melhor depurador para STL e complexos tipos (assim como Visual Studio é apenas um depurador melhor planície do que MDBG).

Isto não quer dizer WinDBG é menos potente, só que é o nível mais baixo (por exemplo, tentar fazer algo de útil com despejos de memória usando o Visual Studio - você não pode).

De qualquer forma, para responder sua pergunta, você pode usar o Visual Studio para olhar para os tipos de dados usando alguns truques:

  1. Inicie outra instância do WinDBG, anexar não-invasiva: cdb -p <PID> -pv. Isto irá suspender os fios da debugee. Agora você pode desconectar com segurança o WinDBG qd
  2. originais
  3. Anexar Visual Studio para ele, e, em seguida, retire o qd WinDBG não-invasivo. Olhe para o STL e continuar como desejar.
  4. Quando você precisa voltar para WinDBG, Goto passo 1, swap com uma WinDBG invasivo.

Eu geralmente acabam furando um método toString() em um monte de minhas aulas. Isso mostra toda a informação que eu considero importante, quaisquer recipientes pode então chamar esta opção para exibir as informações de classe no console

Use dt -r ou seja dt yourapp! classe 7ffdf000 R5

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top