2012-08-13 6 views
8

Wenn ich mein Programm (zugegeben, es wurde im Debug-Modus gebaut), bekomme ich eine Fehlermeldung "Externe Ausnahme 80000003".Wie man die Ausnahme 80000003 loswerden?

Nach Win32 Exception/Access Violation Errors bedeutet es 0x80000003 EXCEPTION_BREAKPOINT A breakpoint was encountered.

Allerdings gibt es keine in den IDE Haltepunkte zu setzen und ich es außerhalb des IDE leite.

Ja, ich habe die richtige ausführbare Datei. Ich löschte alle Haltepunkte, säuberte mein Projekt und baute es neu, aber immer noch dieses Dialogfeld. Ich löschte sogar die EXE-Datei, baute sie erneut und sah sie dort, wo sie erwartet wurde. Überprüfte den Zeitstempel auf der .exe. Ich habe ein Nachrichtenfeld zu FromCreate() hinzugefügt und sah das plus "Externe Ausnahme 80000003".

Wie mache ich das weg (Aufbau im Debug-Modus)?


D'oh !! Es war alter Code und ich habe vergessen, dass ich dies tatsächlich in einem Fehlerzustand asm int 3 end; codiert hatte, der einen Haltepunkt an die IDE signalisiert (oder an Windows, wenn die IDE nicht läuft, daher das Fehlerfeld). Entschuldigung für die Zeitverschwendung.

+1

Völlig verständlich. Ich bin selbst von ähnlichen Dingen gebissen worden. Und ich habe 'raise exception.create (" schreibe diesen Code ") in Code, den ich dachte, ich wäre fertig mit dem Schreiben. –

+0

+1 Danke, @warren. Gut zu wissen, dass selbst die Experten fehlbar sind ;-) – Mawg

Antwort

7

Ein Haltepunkt ist im Wesentlichen ein Befehl auf Maschinenebene (Opcode?), Der dazu führt, dass die CPU-Verarbeitung pausiert und ein Ausnahmesignal ausgelöst wird. Dies wird normalerweise vom Betriebssystem und dann von einem Benutzerprozess wie einem Debugger oder Simillar übernommen.

Wenn ich das hatte, war es fast immer, wenn mein Code in einen Datenraum sprang. Ich sage fast immer, da ich Breakpoints versehentlich in Code programmiert habe, wenn ich gelegentlich auch Albträume (!) Debugge.

Edit: Wie @Ken White sagt int 3 (der Haltepunkt-Interrupt) ist diejenige, die ich zu hart Code verwendet :-)

Das erste, was ich tun würde, ist ein Stack-Trace erhalten und rückwärts gehen arbeiten.

+0

Ein guter Punkt (+1), und sehr wahrscheinlich mit meinem C-Code :-) aber sicherlich weniger wahrscheinlich mit Delphi? Dennoch werde ich versuchen, Code nach und nach zu kommentieren oder weitere Nachrichtenfelder hinzuzufügen und zu sehen, zwischen welchen zwei dieser Fehler auftritt, um mir zu helfen, sie zu finden. Danke – Mawg

+1

Ich habe Depli nicht verwendet, aber da es nicht verwalteten Code ist, würde ich immer davon ausgehen, dass ich Orte springen kann, wenn ich das Äquivalent von Funktionszeigern verwende. –

+0

Delphi ist im Grunde Pascal. Während es Zeiger haben kann, musst du durch die Ringe springen, um sie zu benutzen - und das tue ich nicht. Deshalb denke ich, dass es unwahrscheinlich ist, dass mein Kabel in das Datensegment springt (abgesehen davon läuft es nach dieser Nachricht weiterhin gut). – Mawg

Verwandte Themen