2012-01-05 7 views
5

È stato un errore che ho appena trovato! Evviva. Il bug era dovuto a un downcast errato, e in effetti stavo usando static_cast anziché dynamic_cast.WinDbg è in grado di rilevare il danneggiamento dell'heap della memoria a causa di downcast non valido?

La mia applicazione è piuttosto grande e multithreading e interagisce con altre applicazioni. Quindi il debugging è molto difficile. Ho provato a utilizzare WinDbg, GFlags e Application Verifier senza risultati. Sicuramente perché non so come usare questi strumenti.

È possibile trovare un danneggiamento dell'heap di memoria a causa di un downcast non valido, con l'uso di strumenti come WinDbg? Se sì, come?

+0

Quello che era un bug che hai appena trovato? Questo post non ha alcun senso. –

+0

@Lightness: ouch, davvero? – Guillaume07

+0

Davvero cosa? Le tue prime due frasi non hanno senso. Parlano di un bug che non hai introdotto nella domanda. Che bug? –

risposta

9

comando Windbg! Mucchio -s -v può rivelare un mucchio corrotto

0:008> !heap -s -v 

    Heap  Flags Reserv Commit Virt Free List UCR Virt Lock Fast 
       (k)  (k) (k)  (k) length  blocks cont. heap 
----------------------------------------------------------------------------- 
.ERROR: Block 001842e8 previous size 0 does not match previous block size 4 
HEAP 00140000 (Seg 00140640) At 001842e8 Error: invalid block Previous 
1

MODIFICA: i commenti hanno chiarito che le opzioni non Windows non sono valide. In quel caso ho avuto fortuna con Purify, ma sfortunatamente è $$$. Tuttavia, non ho familiarità con altri strumenti di controllo della memoria di Windows.

Riguardo a questo caso specifico, ogni volta che ti ritrovi downcasting, trascorri almeno un minuto a pensare a un'interfaccia alternativa oa un design che possa rimuovere la necessità. Errori e avvisi del compilatore e un solido design possono trovare molti bug che altrimenti richiederebbero ore per essere trovati.

+0

consigliare valgrind per un utente di Windows? – PlasmaHH

+0

@ Mark B: così confermi che con valgrind è possibile avere in input il dump di app quando si blocca e in uscita la riga di codice che causa il problema? – Guillaume07

+0

@PlasmaHH: sì, ma penso che ci sia lo strumento equivalente sotto windows – Guillaume07

Problemi correlati