Domanda

I fan di Windbg affermano che è abbastanza potente e io tendo ad essere d'accordo. Ma quando si tratta di eseguire il debug dei contenitori STL, sono sempre bloccato. Se la variabile è nello stack, l'estensione !stl a volte lo capisce, ma quando un contenitore con un tipo complesso (ad esempio std::vector<TemplateField, std::allocator<TemplateField> >) è nell'heap o parte di un'altra struttura, non so proprio come per visualizzare i suoi contenuti.

Apprezzo qualsiasi suggerimento, puntatore.

È stato utile?

Soluzione

Puoi anche provare questa estensione debugger da provare. È una libreria chiamata SDbgExt, sviluppata da Skywing .

Altri suggerimenti

Trovo spesso inadeguato il supporto del debugger per i tipi di dati STL. Per questo motivo utilizzo sempre più framework di registrazione e dichiarazioni di registrazione . Pensavo che fossero per persone che non potevano usare un debugger, ma ora mi rendo conto che offrono un valore reale. Consentono di incorporare le conoscenze di debug portatili nel codice e di gestirle insieme al codice. Al contrario, il lavoro svolto nel debugger è in genere effimero.

Estensione Python per WinDbg (pykd) hanno frammento stlp.py che può scaricare il contenuto della mappa.
Attualmente supporta l'implementazione della mappa STLPort. Testato su x86 e x64. Questo articolo dimostra come usarlo (è in russo , ma, gli esempi sono autoesplicativi).

Ho avuto la stessa identica domanda qualche tempo fa. La mia risposta è che Visual Studio è davvero un debugger migliore per STL e tipi complessi (proprio come Visual Studio è semplicemente un debugger migliore di MDbg).

Questo non vuol dire che WinDBG sia meno potente, solo che è di livello inferiore (ad esempio, prova a fare qualcosa di utile con i crash dump usando Visual Studio - non puoi).

Ad ogni modo, per rispondere alla tua domanda, puoi usare Visual Studio per esaminare i tipi di dati usando alcuni trucchi:

  1. Avvia un'altra istanza di WinDBG, collega in modo non invasivo: cdb -p <PID> -pv. Ciò sospenderà i thread del debugee. Ora puoi staccare in sicurezza il WinDBG originale qd
  2. Collega Visual Studio ad esso, quindi scollega il WinDBG non invasivo <=>. Guarda la STL e continua come desideri.
  3. Quando devi tornare a WinDBG, vai al passaggio 1, scambia con un WinDBG invasivo.

Di solito finisco per applicare un metodo toString() in molte delle mie lezioni. Questo mostra tutte le informazioni che ritengo importanti, tutti i contenitori possono quindi chiamarlo per visualizzare le informazioni sulla classe nella console

Usa dt -r vale a dire yourapp! classe 7ffdf000 -r5

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top