Fehler-Offset (Windows)

OP #6830778
Lesenswert?

Hallo zusammen,

ich habe ein (selbst geschriebenes) Windows-Programm, das ohne 
Fehlermeldung abstürzt. Der Fehlercode ist 0xc0000094 (Integer-Division 
durch Null) und einen Fehler-Offset liefert mir die Ereignisanzeige 
ebenfalls.

Kann mir der Fehler-Offset irgendwie dabei weiterhelfen, die 
entsprechende Stelle im Quelltext/Map File/Disassembly zu finden?
#6830837
Lesenswert?

Wenn du den Quelltext hast, lass das Programm im Debugger laufen, oder 
lass den Post-Mortem drauf los.

Über den Offset kannst du die Stelle im Diassembly finden, aber ob die 
dich dann zur Stelle im Sourcecode führt, ist fraglich (falls nicht eh 
in Assembler geschrieben)

https://stackoverflow.com/questions/1319234/analyzing-a-crash-in-windows-what-does-the-error-message-tell-us

Oliver
Gast #6831114
Lesenswert?

Mach dir eine map Datei (cl -FeMyProg.exe *.obj -link -map).

In der Map Datei siehst du die Addressen aller Funktionen,
relativ zur Program Startaddresse (__ImageBase).

Damit kennst du schon mal die Funktion mit der Division durch 0.

Dann machst du dir ein Disassembly (mit dumpbin -disasm oder mit 
objdump).
Damit weisst du den Assemblerbefehl, der die Division durch 0 verursacht 
hat.

Beachte, dass Windows das Program heutzutage an einer zufälligen 
Addresse
startet.  Den Offset zu den Werten im Map File musst du daher 
rausrechnen.

Wenn das ganze reproduzierbar auftritt, hast du es leichter.
Einfach im Debugger ausführen, und warten bis es passiert.
Gast #6831141
Lesenswert?

udok schrieb:
> (cl -FeMyProg.exe *.obj -link -map)

Und wenn sein Pascal-Compiler diese Zeile nicht frisst? ;-)
Zugegeben, das war etwas provokant, aber man sollte nicht davon 
ausgehen, daß ALLE Programmierer nur C verwenden (es gibt auch andere 
Sprachen)...

Nichts für ungut
Gast #6831218
Lesenswert?

Jim M. schrieb:
> Früher(tm) hatte man dafür das addr2line tool.

Unter Windows kenne ich das nicht?


> Bei modernen Compilern/debuggern ist sowas in die IDE integriert.
Ja, aber das nützt dir nichts, wenn der Fehler beim Anwender auftritt...

> Division durch Null kann man aber auch mit Lesen des Source Code finden.
grep 'Division durch Null'`*.cpp, oder wie meinst du das konkret?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren