Dumparna är nästan alltid helt värdelösa om exempelvis "Illustrator.exe" kraschar. Det är alltid buggar i programmen (pga undermåliga tester innnan de släpps). Man kan se att det programmet läser från eller skriver till minne som den inte äger, typiskt NULL. Men det är bara assembly-kod man kan studera, och det är värdelöst.
Dumpar är däremot extremt viktig felsökningshjälp i egna program. Anta man själv har ett program ute hos en kund och har ställt in Dr Watson på "Create Crash Dump Files" på kundens dator. När man får .dmp, är det viktigt att ha kvar alla .dll:er .exe-filer samt symbolerna (.pdb) till dessa och förstås matchande källkod.
Då kan man ladda in detta i efterhand i windbg (Microsofts debugger http://www.microsoft.com/ddk/debugging) och få fram exakt var det crashade samt call-stack och se variabler, register etc. och på så sätt se vad som hänt.
Man bör installera symboler till OS:et, finns att hämta på http://www.microsoft.com/windows2000/downloads/servicepacks/sp2/debug eller vilket service pack man nu har. Det underlättar debuggningen genom att man kan se bättre vad som hänt nere i MS dll:er (kernel32.dll osv).
Man installerar symboler och windbg. Ställ in drwtson på att generera dump-filer, se http://support.microsoft.com/support/kb/articles/Q121/4/34.asp , http://msdn.microsoft.com/library/default.asp?url=/library/en-us/regentry/11500.asp och http://msdn.microsoft.com/library/default.asp?url=/library/en-us/regentry/1704.asp?frame=true .
Gör ett enkelt program som krashar, typ:
void main()
{
printf("nu börjar det\n");
char *p=0;
*p='a'; // Aj, det här smäller
printf("nu är det över\n");
}
Kör detta, och se till att du hittar var .dmp-filen hamnar (observera att du inte ska köra det under debuggern, eftersom den kommer att hugga second-chance exception då istället för dr watson).
Öppna windbg, välj "open crash dump". Ställ in symbol-path dit dina pdb:er ligger och source-code path där källkoden finns. Man måste eventuellt skriva .reload efter och trycka enter för att den ska hitta symbol-filerna. Sen kan du hitta call-stacks, klicka på den och hamna på källkoden där det smällde.
Man kan även med 'userdump' forcera .dmp-filer från en process som dead-lockar, och i efterhand titta vad den var i för state. http://support.microsoft.com/support/kb/articles/Q241/2/15.ASP
Enkelt va? ;-)
En bra bok om ämnet är John Robbin's "Debugging Applications", http://www.amazon.com/exec/obidos/ASIN/0735608865/qid=996795580/sr=2-1/ref=aps_sr_b_1_1/107-3764002-4642136
Hjälpen till windbg är inte heller att förakta, men lite tung i början.
[Redigerat av developer den 03 aug 2001]
[Redigerat av developer den 03 aug 2001]