Exception Callstack
-
Hallo,
mein Programm stürzt leider mit einer mir unbekannten Exception ab.
Catch ( ... ) im main fängt alles auf.
Ich muss natürlich wissen, wo der Absturz erfolgte.
Brauche Tipps.
Verwende MSVC9 unter XPSP3
danke
Troll.Soft
-
Troll.Soft schrieb:
Brauche Tipps.
Du hast einen Bug?
Benutze einen Debugger! MSVC sollte bereits einen eingebaut haben.
Damit sollte sich die Fehlerstelle leicht finden lassen. Und mit etwas Geschick auch die Ursache.
-
Wie waere es damit: catch(...) weglassen und schauen, was die Exception sagt?
-
knivil schrieb:
Wie waere es damit: catch(...) weglassen und schauen, was die Exception sagt?
Der Debugger ist in diesem Fall sehr schweigsam und sagt nur:
Eine Ausnahme (erste Chance) bei 0x6517e0fa in main_sql.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xfeeefef2.
Unbehandelte Ausnahme bei 0x6517e0fa in main_sql.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xfeeefef2.SeppJ schrieb:
Du hast einen Bug?
Benutze einen Debugger! MSVC sollte bereits einen eingebaut haben.
Damit sollte sich die Fehlerstelle leicht finden lassen. Und mit etwas Geschick auch die Ursache.Das ist die übliche Methode, leider in diesem Fall nicht erfolgreich.
void func() { try { AbsturzCode !!! hier Absturz !!! } catch ( ... ) { wird nicht aufgefangen !!! } } main() try { func(); } catch ( ... ) { wird hier aufgefangen }Der Absturz erfolgt in func() innerhalb von try catch() herausgefunden mit der uralten Methode "auskommentieren"
Also alles etwas seltsam
tschüß
Troll.Soft
-
Das wird ne SEH-Exception sein.
Du liest von Speicher, der dir nicht gehört, der Adresse nach zu urteilen vermutlich knapp hinter dem Ende des Stacks. Wild ins Blaue geraten sieht mir das so aus, als behandeltest du ein Array als länger, als es wirklich ist. Möglicherweise off-by-one.
Ohne Code und Kristallkugel kann ich dir mehr aber auch nicht sagen.
-
seldon schrieb:
Du liest von Speicher, der dir nicht gehört
Ja, z.B. indem ich Speicher freigebe und später doch noch nutze. Finde die Stelle bloß nicht. Das Schweinderl stürzt nicht an der Fehlerstelle ab.
Gibt es einen Trick, an der Stelle, an der die Exception erfolgreich aufgefangen wird, herauszubekommen, wo die Exception ausgelöst wurde?tschüß
Troll.Soft
-
Wenn du den VC-Compiler nimmst: der dort eingebaute Debugger hat unter den vielsagenden Menüpunkt Debugger Ausnahmen / Exceptions. Wenn du deine Anwendung im Debugger startest beziehungsweise dich an die App attachest, kannst du dort deine zuvor gesehene Exception auswählen und einen Break des Debuggers erzwingen. Nun schaust du dir unter Aufrufliste / Callstack an, wo das knallt.
Gruß Kimmi
-
Hm, war wohl etwas zu verärgert. Der Debugger zeigt an, das der Fehler innerhalb einer anderen Bibliothek liegt. Aber es wird wohl so sein, das er dort erst wirksam wird. Muß weiter suchen.
tschüß
Troll.Soft
-
Troll.Soft schrieb:
Hm, war wohl etwas zu verärgert. Der Debugger zeigt an, das der Fehler innerhalb einer anderen Bibliothek liegt. Aber es wird wohl so sein, das er dort erst wirksam wird. Muß weiter suchen.
tschüß
Troll.SoftDas ist oftmals so. Der Debugger zeigt dir aber auch, wo die andere Bibliothek von dir aufgerufen wird.
-
SeppJ schrieb:
Das ist oftmals so.
danke, hast ja recht
SeppJ schrieb:
Der Debugger zeigt dir aber auch, wo die andere Bibliothek von dir aufgerufen wird.
stimmt, nützt bloß nichts. Wird von meinem Main aufgerufen und ist ein Gui-Thread.
Geh nun ein Bierchen holen und gebe mir noch eine Chance (eine Idee ist noch da).
Wenn das nicht klappt, ist der große Hammer fällig.tschüß
Troll.Soft
-
So,
bin den ganzen Code durchgegangen, einige Asserts eingefügt, einiges vorteilhafter geschrieben und er stürzt nicht gleich ab. Leider nur, weil der entsprechende Code nun nicht mehr durchlaufen werden muß.
tschüß
Troll.Soft