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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.