/ / Perché non windbg smontare metà della mia funzione? - windbg, smontaggio

Perché non windbg smontare la metà della mia funzione? - windbg, smontaggio

Sfondo: Sto usando windbg per diagnosticare le cause dai minidump del servizio WinQual di Microsoft. Mi sono preso il tempo di sistemare le cose correttamente con PDB e binari nello stesso percorso del momento in cui sono stati costruiti, e ho avuto molta fortuna con windbg e questa configurazione.

Oggi mi sono imbattuto in un minidump in cui mi piacerebbe davvero guardare attraverso lo smontaggio per capire il problema, ma windbg invertirà solo una sezione della funzione.

La mia funzione è simile a questa:

SomeStruct* STDCALL getThing(int id)
{
S_ASSERT(a);
S_ASSERT(b);
S_ASSERT(c);
SomeStruct* result = fn(id);
S_ASSERT(d);
return result;
}

S_ASSERT è la nostra macro che alla fine chiama in una funzione, dove il int 3 l'istruzione viene colpita, anche nelle versioni di rilascio. Non riesco a dire quale è stato colpito senza ispezionare lo smontaggio.

Usando windbg, posso saltare a getThingnello stack delle chiamate, attivare lo smontaggio e vedere un po 'di codice, ma non "scorrere indietro nello smontaggio. Ho quindi aggiunto un orologio module!getThing per ottenere l'indirizzo della funzione, e lo ha scrittoindirizzo nella finestra di disassemblaggio. Invece di istruzioni, ottengo ~ 100 righe di ??? seguito da alcuni disassemblaggi che non assomigliano al punto di ingresso della funzione ma sembrano parte della funzione corretta. Sembra questo:

No prior disassembly possible
module!getThing:
1d7d4aa0 ??              ???
1d7d4aa1 ??              ???
1d7d4aa2 ??              ???
...
1d7d4b0a 087d1c          or      byte ptr [ebp+1Ch],bh
1d7d4b0d 8b4004          mov     eax,dword ptr [eax+4]
1d7d4b10 8bf9            mov     edi,ecx
1d7d4b12 83e11f          and     ecx,1Fh
1d7d4b15 bb01000000      mov     ebx,1
...

Quindi, come posso convincere windbg a mostrare il resto dello smontaggio? In alternativa, sto interpretando male i risultati? C'è qualche altro software in grado di caricare minidumps oltre a Visual Studio?

Grazie per qualsiasi suggerimento che possiate fornire!

risposte:

2 per risposta № 1

Assicurati di avere una copia di stesso dll o exe nel percorso del simbolo (.sympath) o il percorso exe (.exepath). Uso !sym noisy e .reload e verifica che windbg trovi questa dll.