Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 11:14

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Infos über Delphi Exception
BeitragVerfasst: Do Jul 15, 2004 12:52 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach,

ich versuch grad eine Anwendung welche schon fertig ist, aber kleinere Zugriffsverletzung auftreten, den fehler zu finden.
Es gelingt mir aber absolut nicht, da es ein fehler ist, der mal ab und zu mal auftritt und das program schon so komplex geworden ist, das ich nich alles neu machen kann.
Grade weils für die firma is :( Ist nen Datenbank system :p

Auf jedemfall, es gibt in delphi ne möglich Fehler die kommen abzufangen und selbst zu verarbeiten.
Application.OnException.

Welche man in nem form so deklarieren kann:

Code:
  1.  
  2. procedure TfrmMain.AppException(Sender: TObject; E: Exception);
  3. begin
  4.   DDebug('Interner Programmfehler: ' + E.Message);
  5. end;
  6.  


Damit kann man die Message und Klasse abfragen, EAccessViolation, EAbstractError, EDivisionByZero usw.
Aber mehr irgendwie nicht, oder ich bin zu doof das rauszufinden.

Ich würde gerne wissen, ob man mehr infos aus der E.Exception herausfinden kann.
Z.b., in welcher Klasse der Fehler aufgetreten ist z.b. Wie die klasse heisst.
Am besten wäre natürlich auch ne Zeile ausgeben zu lassen, welche zeile den fehler verursachte :p Aber das geht wohl nich denk ich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 13:14 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Code:
  1.  
  2. function ReturnAddr: Pointer;
  3. asm
  4.   MOV     EAX,[EBP+4]
  5. end;
  6.  

Das sollte die Rücksprungadresse zurückgeben, mit deren Hilfe du den Fehler finden kannst: Anwendung ausführen, dann Suchen -> Laufzeitfehler suchen. Das funktioniert allerdings nur, wenn AppException ohne Umwege aufgerufen wurde - stellt sich schnell heraus, wenn du es ausprobierst und immer die identische Adresse zurückkommt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 13:40 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Thx :)

Noch ne frage, wie bekomm ich die Adresse als Integer raus von einem Pointer ?
Normalerweise über

Code:
  1.  
  2. var
  3.   p : Pointer;
  4.   addi : Integer;
  5. begin
  6.   p := ReturnAddr;
  7.   addi := Integer(P);
  8.   Showmessage(IntToHex(addi, 8));
  9. end;
  10.  


Nur da bekomm ich irgendwie andere adresse raus :(
wie in der E.Exception Message steht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 13:50 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Bei mir gehts so:
Code:
  1.  
  2. IntToHex(Cardinal(ReturnAddr),8)
  3.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 14:10 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
interessant könnte auch ExceptAddr sein, wenn ReturnAddr nicht funktioniert - was gut sein kann, wenn ich mich so ein wenig durch den VCL Code wühle (in Delphi5 liegt das gute Stück in der SysUtils).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 15:17 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
ExceptAddr isses, jo thx :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
In der MemCheck Unit sind auch Funktionen enthalten die die Debug Informationen auslesen und zu der Addresse den Namen der Funktion finden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 15, 2004 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nur so ne dumme Frage. Siehst du das denn nicht im Debugger? Eine große Anzahl an Exceptions sind sofort im Debugger sichtbar. Also direkt die Quellcodestelle wo sie geraised werden. Dann hast du meistens eigentlich auch schon alles was man braucht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 16, 2004 07:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Schau mal bei den Jedis vorbei. In deren JVCL oder JCL Lib ist ein Exception-Dialog. Wenn du die Libs installierst, hast du eine Option im Delphi-Menu, Debug-Infos in die Exe einzubinden (=komprimiertes MAP-File). Dann einfach den Exceltion-Dialog uses und wenn die Exception auftritt, werden Detail-Infos wie Name der Unit- Zeile etc. ausgegeben. Geniale Sache!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 16, 2004 11:07 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Lieder kann ich in dem Fall nix mit Debugger anfangen, da er zu keiner zeile spring wenn der fehler gefunde wurde :(
Leider isses auch so, das ich den fehler ums verrecken nich nachvollziehen kann, der kommt mal oder kommt nicht :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 16, 2004 23:23 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Rchtig toll ist natürlich wenn man so Fehlermeldungen wie die Unreal Engine mit seitenlangem StackTrace erzeugen kann. Dann ist selbst der Fehlerfall noch was Besonderes. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 18, 2004 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ja, und sowas ähnliches macht die Jedi-Komponente. Man müsste die mal auseinander nehmen und nachschauen, was da so alles getan wird...

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]