Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
WinDbg är ett felsökningsprogram i kernelläge och användarläge som ingår i felsökningsverktyg för Windows. Följande praktiska övningar kan hjälpa dig att komma igång med WinDbg som felsökningsprogram i användarläge.
Information om hur du hämtar WinDbg finns i Ladda ned och installera WinDbg Windows-felsökningsprogrammet.
Öppna Anteckningsblock och bifoga WinDbg
Gå till installationskatalogen och öppna WinDbg.exe.
På menyn Arkiv väljer du Starta körbar fil. I dialogrutan för att köra en körbar fil, gå till mappen som innehåller notepad.exe. (Filen notepad.exe finns vanligtvis i C:\Windows\System32.) För Filnamnanger du notepad.exe. Välj Öppna.
På kommandoraden längst ned i WinDbg-fönstret anger du följande kommando:
Utdata liknar det här exemplet:
Symbol search path is: srv* Expanded Symbol search path is: cache*;SRVSymbol-sökvägen talar om för WinDbg var den kan leta efter symbolfiler (PDB). Felsökningsprogrammet behöver symbolfiler för att få information om kodmoduler, till exempel funktionsnamn och variabelnamn.
Ange sedan följande kommando:
Kommandot
.reloadinstruerar WinDbg att göra sin första sökning för att hitta och läsa in symbolfiler.Om du vill se symbolerna för modulen notepad.exe anger du följande kommando:
Nota
Om inga utdata visas anger du
.reload /fför att försöka framtvinga symbolbelastningen. Använd kommandot !sym noisy för att visa mer information om inläsning av symboler.Om du vill se symboler i modulen notepad.exe som innehåller
mainanvänder du undersöka symboler kommando för att lista moduler som matchar masken:x notepad!wWin*Utdata liknar det här exemplet:
00007ff6`6e76b0a0 notepad!wWinMain (wWinMain) 00007ff6`6e783db0 notepad!wWinMainCRTStartup (wWinMainCRTStartup)Om du vill placera en brytpunkt på
notepad!wWinMainanger du följande kommando:Kontrollera att brytpunkten har angetts genom att ange följande kommando:
Utdata liknar det här exemplet:
0 e Disable Clear 00007ff6`6e76b0a0 0001 (0001) 0:**** notepad!wWinMainOm du vill starta Anteckningar-processen anger du följande kommando:
Anteckningsblock körs tills det kommer till funktionen
WinMainoch sedan stoppas det i debuggern.Breakpoint 0 hit notepad!wWinMain: 00007ff6`6e76b0a0 488bc4 mov rax,rspOm du vill se en lista över kodmoduler som för närvarande läses in i Anteckningar-processen anger du följande kommando:
Utdata liknar det här exemplet:
0:000> lm start end module name 00007ff6`6e760000 00007ff6`6e798000 notepad (pdb symbols) C:\ProgramData\Dbg\sym\notepad.pdb\BC04D9A431EDE299D4625AD6201C8A4A1\notepad.pdb 00007ff8`066a0000 00007ff8`067ab000 gdi32full (deferred) 00007ff8`067b0000 00007ff8`068b0000 ucrtbase (deferred) 00007ff8`06a10000 00007ff8`06aad000 msvcp_win (deferred) 00007ff8`06ab0000 00007ff8`06ad2000 win32u (deferred) 00007ff8`06b40000 00007ff8`06e08000 KERNELBASE (deferred) 00007ff8`07220000 00007ff8`072dd000 KERNEL32 (deferred) 00007ff8`07420000 00007ff8`07775000 combase (deferred) 00007ff8`07820000 00007ff8`079c0000 USER32 (deferred) 00007ff8`079c0000 00007ff8`079f0000 IMM32 (deferred) 00007ff8`07c00000 00007ff8`07c2a000 GDI32 (deferred) 00007ff8`08480000 00007ff8`085ab000 RPCRT4 (deferred) 00007ff8`085b0000 00007ff8`0864e000 msvcrt (deferred) 00007ff8`08c40000 00007ff8`08cee000 shcore (deferred) 00007ff8`08db0000 00007ff8`08fa5000 ntdll (pdb symbols) C:\ProgramData\Dbg\sym\ntdll.pdb\53F12BFE149A2F50205C8D5D66290B481\ntdll.pdb 00007fff`f8580000 00007fff`f881a000 COMCTL32 (deferred)Om du vill se en stackspårning anger du följande kommando:
Utdata liknar det här exemplet:
0:000> k 00 000000c8`2647f708 00007ff6`6e783d36 notepad!wWinMain 01 000000c8`2647f710 00007ff8`07237034 notepad!__scrt_common_main_seh+0x106 02 000000c8`2647f750 00007ff8`08e02651 KERNEL32!BaseThreadInitThunk+0x14 03 000000c8`2647f780 00000000`00000000 ntdll!RtlUserThreadStart+0x21Om du vill starta Anteckningar igen, skriv in följande kommando:
Om du vill öppna Anteckningar går du till menyn Arkiv och väljer Avbryt.
Ange följande kommandon för att ange och verifiera en brytpunkt vid
ZwWriteFile:För att starta Anteckningar igen, ange g. I fönstret Anteckningar anger du text. På menyn Arkiv väljer du Spara. Koden som körs stöter på problem när den handlar om
ZwCreateFile. Ange kommandot k för att se stackspårningen.
I WinDbg-fönstret, till vänster om kommandoraden, visas processor- och trådnumren. I det här exemplet är det aktuella processornumret 0 och det aktuella trådnumret är 11 (
0:011>). Fönstret visar stackspårningen för tråd 11 som körs på processor 0.Om du vill se en lista över alla trådar i Anteckningar-processen anger du det här kommandot (tilde):
Utdata liknar det här exemplet:
0:011> ~ 0 Id: 5500.34d8 Suspend: 1 Teb: 000000c8`262c4000 Unfrozen 1 Id: 5500.3960 Suspend: 1 Teb: 000000c8`262c6000 Unfrozen 2 Id: 5500.5d68 Suspend: 1 Teb: 000000c8`262c8000 Unfrozen 3 Id: 5500.4c90 Suspend: 1 Teb: 000000c8`262ca000 Unfrozen 4 Id: 5500.4ac4 Suspend: 1 Teb: 000000c8`262cc000 Unfrozen 5 Id: 5500.293c Suspend: 1 Teb: 000000c8`262ce000 Unfrozen 6 Id: 5500.53a0 Suspend: 1 Teb: 000000c8`262d0000 Unfrozen 7 Id: 5500.3ca4 Suspend: 1 Teb: 000000c8`262d4000 Unfrozen 8 Id: 5500.808 Suspend: 1 Teb: 000000c8`262da000 Unfrozen 10 Id: 5500.3940 Suspend: 1 Teb: 000000c8`262dc000 Unfrozen . 11 Id: 5500.28b0 Suspend: 1 Teb: 000000c8`262de000 Unfrozen 12 Id: 5500.12bc Suspend: 1 Teb: 000000c8`262e0000 Unfrozen 13 Id: 5500.4c34 Suspend: 1 Teb: 000000c8`262e2000 UnfrozenI det här exemplet har 14 trådar index 0 till och med 13.
Om du vill titta på stackspårningen för tråd 0 anger du följande kommandon:
Utdata liknar det här exemplet:
0:011> ~0s 0:011> ~0s win32u!NtUserGetProp+0x14: 00007ff8`06ab1204 c3 ret 0:000> k # Child-SP RetAddr Call Site 00 000000c8`2647bd08 00007ff8`07829fe1 win32u!NtUserGetProp+0x14 01 000000c8`2647bd10 00007fff`f86099be USER32!GetPropW+0xd1 02 000000c8`2647bd40 00007ff8`07d12f4d COMCTL32!DefSubclassProc+0x4e 03 000000c8`2647bd90 00007fff`f8609aba SHELL32!CAutoComplete::_EditWndProc+0xb1 04 000000c8`2647bde0 00007fff`f86098b7 COMCTL32!CallNextSubclassProc+0x9a 05 000000c8`2647be60 00007ff8`0782e858 COMCTL32!MasterSubclassProc+0xa7 06 000000c8`2647bf00 00007ff8`0782de1b USER32!UserCallWinProcCheckWow+0x2f8 07 000000c8`2647c090 00007ff8`0782d68a USER32!SendMessageWorker+0x70b 08 000000c8`2647c130 00007ff8`07afa4db USER32!SendMessageW+0xdaOm du vill avsluta felsökningen och koppla från Notepad-processen anger du följande kommando:
Öppna ditt eget program och bifoga WinDbg
Anta till exempel att du har skrivit och skapat det här lilla konsolprogrammet:
...
void MyFunction(long p1, long p2, long p3)
{
long x = p1 + p2 + p3;
long y = 0;
y = x / p2;
}
void main ()
{
long a = 2;
long b = 0;
MyFunction(a, b, 5);
}
I den här övningen antar du att det byggda programmet (MyApp.exe) och symbolfilen (MyApp.pdb) finns i C:\MyApp\x64\Debug. Anta också att programmets källkod finns i C:\MyApp\MyApp and that the target machine compiled MyApp.exe.
Öppna WinDbg.
På menyn Arkiv väljer du Starta körbar fil. I dialogrutan Kör körbar fil går du till C:\MyApp\x64\Debug. För Filnamnanger du MyApp.exe. Välj Öppna.
Ange följande kommandon:
.sympath+ C:\MyApp\x64\Debug
Kommandona talar om för WinDbg var du hittar symboler och källkod för ditt program. I det här fallet behöver inte källkodsplatsen anges med hjälp av .srcpath- eftersom symbolerna har fullständigt kvalificerade sökvägar till källfilerna.
Ange följande kommandon:
Ditt program bryter sig in i felsökningsprogrammet när det gäller dess
mainfunktion.WinDbg visar källkoden och kommandofönstret.
På menyn Felsöka väljer du Stega in i (eller väljer F11). Fortsätt att stega tills du kliver in i
MyFunction. När du går in på radeny = x / p2kraschar programmet och bryter sig in i felsökningsprogrammet.Utdata liknar det här exemplet:
(1450.1424): Integer divide-by-zero - code c0000094 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. MyApp!MyFunction+0x44: 00007ff6`3be11064 f77c2428 idiv eax,dword ptr [rsp+28h] ss:00000063`2036f808=00000000Ange följande kommando:
WinDbg visar en analys av problemet (i det här fallet division med 0).
FAULTING_IP: MyApp!MyFunction+44 [c:\myapp\myapp\myapp.cpp @ 7] 00007ff6`3be11064 f77c2428 idiv eax,dword ptr [rsp+28h] EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 00007ff63be11064 (MyApp!MyFunction+0x0000000000000044) ExceptionCode: c0000094 (Integer divide-by-zero) ExceptionFlags: 00000000 NumberParameters: 0 ... STACK_TEXT: 00000063`2036f7e0 00007ff6`3be110b8 : ... : MyApp!MyFunction+0x44 00000063`2036f800 00007ff6`3be1141d : ... : MyApp!main+0x38 00000063`2036f840 00007ff6`3be1154e : ... : MyApp!__tmainCRTStartup+0x19d 00000063`2036f8b0 00007ffc`b1cf16ad : ... : MyApp!mainCRTStartup+0xe 00000063`2036f8e0 00007ffc`b1fc4629 : ... : KERNEL32!BaseThreadInitThunk+0xd 00000063`2036f910 00000000`00000000 : ... : ntdll!RtlUserThreadStart+0x1d STACK_COMMAND: dt ntdll!LdrpLastDllInitializer BaseDllName ;dt ntdll!LdrpFailureData ;.cxr 0x0 ;kb FOLLOWUP_IP: MyApp!MyFunction+44 [c:\myapp\myapp\myapp.cpp @ 7] 00007ff6`3be11064 f77c2428 idiv eax,dword ptr [rsp+28h] FAULTING_SOURCE_LINE: c:\myapp\myapp\myapp.cpp FAULTING_SOURCE_FILE: c:\myapp\myapp\myapp.cpp FAULTING_SOURCE_LINE_NUMBER: 7 FAULTING_SOURCE_CODE: 3: void MyFunction(long p1, long p2, long p3) 4: { 5: long x = p1 + p2 + p3; 6: long y = 0; > 7: y = x / p2; 8: } 9: 10: void main () 11: { 12: long a = 2; ...
Sammanfattning av kommandon
-
Contentskommando påHelp-menyn - .sympath (Ange symbolväg)
- .reload (Ladda om modul)
- x (granska symboler)
- g (Go)
-
Breakkommando påDebug-menyn - lm (listinlästa moduler)
- k (Visa stackspårning)
- bu (Ange brytpunkt)
- bl (brytpunktslista)
- ~ (trådstatus)
- ~s (Ange Aktuell Tråd)
- .sympath+ (Ange sökväg för symboler) lägg till i befintlig symbolsökväg
- .srcpath (Ange källsökväg)
-
Step Intokommando påDebug-menyn (F11) - !analysera -v
- qd (Avsluta och Koppla från)
Se även
Kom igång med WinDbg (kernelläge)
Ladda ned och installera WinDbg Windows-felsökningsprogrammet