Anzeige

Am Puls von Microsoft

Anzeige

Systemprogramme WinDbg Preview hat mindestens einen Bug

Ari45

gehört zum Inventar
Für alle fleißigen Helfer, die ab und zu, oder häufig, Dumpfiles debuggen:
Die App WinDbg Preview hat mindestens eine Bug, wahrscheinlich sogar zwei.
Nach einem Austausch per PN mit @tkmopped kommen wir zu der Erkenntnis, dass es tatsächlich ein Bug.

1.Fehler bei Sysinfo
In den Dumpfiles werden oft Hardwareinformationen mit gespeichert, die man mit dem Debugger-Befehl sysinfo abrufen kann.
Code:
!sysinfo
!sysinfo [ cpuinfo | cpumicrocode | cpuspeed | gbl | machineid | registers | smbios ] [-csv | -noheaders]
So kann man mit dem Parameter machineid Informationen zum Motherboard und BIOS abrufen,
oder mit cpuspeed die CPU-Geschweindigkeit zum Zeitpunkt des Absturzes
oder mit smbios Informationen zum BIOS erfahren (RAM, CPU usw)
Seit mindestens 2 Monaten funktioniert zwar der Aufruf !sysinfo machineid, aber gibt man !sysinfo smbios geschieht erst mal garnichts. Es wird eine Leerzeile eingefügt, aber das Bereitschaftszeichen erscheint nicht.
!sysinfo cpuspeed
sysinfo: unknown error 80004005
3: kd> !sysinfo machineid
Machine ID Information [From Smbios 2.4, DMIVersion 36, Size=2953]
BiosVendor = Award Software International, Inc.
BiosVersion = F6
BiosReleaseDate = 05/30/2012
SystemManufacturer = Gigabyte Technology Co., Ltd.
SystemProductName = GA-970A-UD3
SystemFamily =
SystemVersion =
SystemSKU =
BaseBoardManufacturer = Gigabyte Technology Co., Ltd.
BaseBoardProduct = GA-970A-UD3
BaseBoardVersion = x.x
3: kd> !sysinfo smbios

hier fehlt dann das Bereitschaftszeichen kd>

Lädt man die gleiche Dumpfile in den Debugger (Desktop), der im Windows SDK enthalten ist, zeigt sich, dass die Infos zu SMBios auch gespeichert sind.
Hier nur ein kurzer Ausschnit aus den Sysinfo SMBios
kd> !sysinfo smbios
[SMBIOS Data Tables v2.4]
[DMI Version - 36]
[2.0 Calling Convention - No]
[Table Size - 2953 bytes]

[BIOS Information (Type 0) - Length 24 - Handle 0000h]
Vendor Award Software International, Inc.
BIOS Version F6
BIOS Starting Address Segment e000
BIOS Release Date 05/30/2012
BIOS ROM Size 400000
BIOS Characteristics
04: - ISA Supported
07: - PCI Supported
09: - Plug and Play Supported
11: - Upgradeable FLASH BIOS
12: - BIOS Shadowing Supported
15: - CD-Boot Supported
16: - Selectable Boot Supported
17: - BIOS ROM Socketed
19: - EDD Supported
22: - 360KB Floppy Supported
23: - 1.2MB Floppy Supported
24: - 720KB Floppy Supported
25: - 2.88MB Floppy Supported
26: - Print Screen Device Supported
27: - Keyboard Services Supported
28: - Serial Services Supported
29: - Printer Services Supported
30: - CGA/Mono Services Supported
BIOS Characteristic Extensions
00: - ACPI Supported
01: - USB Legacy Supported
04: - LS120-Boot Supported
05: - ATAPI ZIP-Boot Supported
08: - BIOS Boot Specification Supported
10: - Enable Targeted Content Distribution
BIOS Major Revision 255
BIOS Minor Revision 255
EC Firmware Major Revision 255
EC Firmware Minor Revision 255
Das dürfte als Beweis dafür ausreichen, dass manche Parameter von Sysinfo von WinDbg Preview einfach nicht gelesen werden.

Als ich mich mit @tkmopped ausgetauscht habe, habe ich auch die Debug-App deinstalliert, einen Systemneustart gemacht und die Debug-App wieder installiert.
Fazit der gleiche Fehler.

2. Fehler beim Auslesen der IRP-Stack
Mithilfe des IRP-Stack kann man feststellen, welche Hardware der IRP-Stack blockiert und welcher Treiber dazu gehört.
Allerdings ist es so, dass der IRP-Stack bei weitem nicht bei allen Stoppfehlern von Interesse ist und deshalb auch nicht mit gespeichert wird.
Der IRP-Stack wird, wenn überhaupt, im letzten Thread gespeichert. Ist ja auch verständlich, denn der hängende IRP-Stackframe hat ja das System zum Absturz gebracht.
Hier ein Beispiel des letzten Thread
Code:
!thread [COLOR="#008000"]// den letzten Thread aufrufen[/COLOR]
THREAD fffffa8016588b50  Cid 0630.258c  Teb: 000000007efdb000 Win32Thread: fffff900c1e15c10 RUNNING on processor 3
IRP List: [COLOR="#008000"]// wenn hier eine Adresse steht, ist der IRP-Stack gespeichert[/COLOR]
    Unable to read nt!_IRP @ fffffa8016801b10
[COLOR="#008000"]// in dieser Dumpfile wurde keine IRP-Liste gespeichert[/COLOR]
Not impersonating
GetUlongFromAddress: unable to read from fffff80003a40c20
Owning Process            fffffa8016588480       Image:         dxdiag.exe
Attached Process          N/A            Image:         N/A
fffff78000000000: Unable to get shared data
Wait Start TickCount      47298226     
Context Switch Count      7252           IdealProcessor: 1                 LargeStack
ReadMemory error: Cannot get nt!KeMaximumIncrement value.
UserTime                  00:00:00.000
KernelTime                00:00:00.000
Win32 Start Address 0x00000000005bea76
Stack Init fffff8800b0f5c70 Current fffff8800b0f54b0
Base fffff8800b0f6000 Limit fffff8800b0ed000 Call 0000000000000000

In einer anderen Dumpfile wurde die IRP-Liste gespeichert, aber nur 3 von 7 IRP-Stackframes angezeigt, und die waren auch noch leer.
Code:
!thread
THREAD ffffa08c2e452080  Cid 0fec.10bc  Teb: 0000000a45569000 Win32Thread: 0000000000000000 RUNNING on processor d
IRP List: ffffa08c2feec010: (0006,04c0) Flags: 00060070  Mdl: ffffa08c330b68a0
[COLOR="#008000"]// Adresse der IRP-Liste[/COLOR]
    Unable to read nt!_IRP @ ffffa08c1eea69a0
Not impersonating
GetUlongFromAddress: unable to read from fffff80235c2ba04
Owning Process            ffffa08c2fbb7080       Image:         audiodg.exe
Attached Process          N/A            Image:         N/A
fffff78000000000: Unable to get shared data
Wait Start TickCount      7118033      
Context Switch Count      8997983        IdealProcessor: 10             
ReadMemory error: Cannot get nt!KeMaximumIncrement value.
UserTime                  00:00:00.000
KernelTime                00:00:00.000
Win32 Start Address 0x00007ff8d653a410
Stack Init fffff20ea24ffb90 Current fffff20ea24fee30
Base fffff20ea2500000 Limit fffff20ea24f9000 Call 0000000000000000
Priority 22 BasePriority 22 PriorityDecrement 0 IoPriority 2 PagePriority 5 
...
[COLOR="#008000"]// aber von den registrierten 7 IRP-Stacks wurden nur 3 leere Stack angezeigt[/COLOR]
irp ffffa08c2feec010
Irp is active with 7 stacks 6 is current (= 0xffffa08c2feec248)
 Mdl=ffffa08c330b68a0: System buffer=ffffa08c30550350: Thread ffffa08c2e452080:  Irp stack trace.  
     cmd  flg cl Device   File     Completion-Context
 [N/A(0), N/A(0)]
            0  0 00000000 00000000 00000000-00000000    

			Args: 00000000 00000000 00000000 00000000
 [N/A(0), N/A(0)]
            0  0 00000000 00000000 00000000-00000000    

			Args: 00000000 00000000 00000000 00000000
 [N/A(0), N/A(0)]
            0  0 00000000 00000000 00000000-00000000    

			Args: 00000000 00000000 00000000 00000000
Im Debugger (Desktop) wurden auch die fehlenden 4 Stacks angezeigt.

Fazit:
WinDbg Preview hat mindestens 2 Bugs, die die Anzeige von zusätzlichen Informationen betreffen.
Der erste Bug ärgert mich schon ganz schön, weil ich die Sysinfo bei fast jedem Debuggen abgefragt habe.
Der zweite Fehler ist auch nicht schön, aber da der IRP-Stack ohnehin nur bei (geschätzt) jeder 10 Dumpfile mit gespeichert wird, ist das noch zu verschmerzen.
 
Anzeige
Anzeige
Oben