AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE XE7 Debugger hält bei Exception eine Funktion darüber an.

XE7 Debugger hält bei Exception eine Funktion darüber an.

Ein Thema von Sankt Rochus · begonnen am 6. Jul 2015 · letzter Beitrag vom 7. Jul 2015
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 12:20
Wie wär's mit einem Breakpoint in der Funktion, in der der Fehler auftritt? Dann stepst du soweit durch, bis der Fehler kommt, und schon hast du ihn am Wickel
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 12:29
Der Aufrufstack beinhaltet die Funktion B auch nicht?
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
Sankt Rochus

Registriert seit: 30. Nov 2012
15 Beiträge
 
#3

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 13:09
Danke schon einmal für eure Hilfsbemühungen!

Wie wär's mit einem Breakpoint in der Funktion, in der der Fehler auftritt? Dann stepst du soweit durch, bis der Fehler kommt, und schon hast du ihn am Wickel
Ja, so behelfe ich mir auch immer. Jedoch kann es vorkommen, dass eine Funktion während der Programmausführung ganz oft aufgerufen wird (z.B. in einer Schleife) und nur ganz selten die Exception auftritt, abhängig von irgendwelchen Variablen. Um dann nicht ganz oft unnötig anzuhalten, muss ich mit bedingten Breakpoints arbeiten. Das funktioniert auch meistens sehr gut, ist aber umständlich und für mich keine Dauerlösung.

Zitat:
Der Aufrufstack beinhaltet die Funktion B auch nicht?
Hmm.. nicht wirklich. Gerade habe ich den Fall. Ich tippe gerne mal ab, was da im Aufrufstack steht:

:7654c42d KERNELBASE.RaiseException + 0x58
:00426dca ConvertErrorFmt + $1E
uSTDExport.TSTDExport.exportKData(... Verschiedene Parameter ...)
...

Anhalten tut der Debugger in exportKData(...), die eigentliche Exception wurde aber von einer fehlerhaften Konvertierung in einer Funktion ausgelöst, die von exportKData(...) aufgerufen wird. Der Name dieser Funktion taucht im Aufrufstack nicht auf.

Zitat:
In einem simplen Beispiel passiert das hier zumindest nicht. Der Debugger bleibt exakt in der Zeile stehen, wo die Exception auftritt.
Danke fürs Ausprobieren. Nun weiß ich zumindest, dass es anders sein sollte, und kein neues "Feature" in XE7 ist
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 13:31
Wie wär's mit einem Breakpoint in der Funktion, in der der Fehler auftritt? Dann stepst du soweit durch, bis der Fehler kommt, und schon hast du ihn am Wickel
Ja, so behelfe ich mir auch immer. Jedoch kann es vorkommen, dass eine Funktion während der Programmausführung ganz oft aufgerufen wird (z.B. in einer Schleife) und nur ganz selten die Exception auftritt, abhängig von irgendwelchen Variablen. Um dann nicht ganz oft unnötig anzuhalten, muss ich mit bedingten Breakpoints arbeiten. Das funktioniert auch meistens sehr gut, ist aber umständlich und für mich keine Dauerlösung.
Und wie wär's mit einem Try-Except-Block? Im Except-Bereich könntest du dann eine MessageBox mit der genauen Fehlermeldung zeigen lassen ...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#5

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 13:54
Anhalten tut der Debugger in exportKData(...), die eigentliche Exception wurde aber von einer fehlerhaften Konvertierung in einer Funktion ausgelöst, die von exportKData(...) aufgerufen wird. Der Name dieser Funktion taucht im Aufrufstack nicht auf.
Kannst du die entsprechende Funktion, die Zeile darin, wo der Fehler auftritt, und die Zeilen, wo die in exportKData aufgerufen wird, mal zeigen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Sankt Rochus

Registriert seit: 30. Nov 2012
15 Beiträge
 
#6

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 14:35
Zitat:
Kannst du die entsprechende Funktion, die Zeile darin, wo der Fehler auftritt, und die Zeilen, wo die in exportKData aufgerufen wird, mal zeigen?
Kann ich machen. Ich habe hier gerade schon wieder einen anderen Fall, vergiss also bitte exportKData().

Die Funktion exportMedikament(...) ruft TSTDUtils.LittleEndianDateStringToDate(aValue: string): TDateTime auf. Letztgenannte Funktion soll einen speziellen Datumsstring parsen, schlägt aber fehl, da der String dem Datumsformat nicht entspricht. Da die Funtkion exportMedikament(...) sehr umfassend ist, möchte ich nur den Ausschnitt hier zeigen:

Hier die aufrufende Funktion:

Delphi-Quellcode:
if m_LicenseManager.License.IsLicensed('Patientendaten/Patient/Medikamente/Medikament/Absetzdatum') then
begin
  if ((i = 10) and not l_Zusatz.IsEmpty) then l_Medikament.Absetzdatum := TSTDUtils.LittleEndianDateStringToDate(l_Zusatz); // Hier wird die Funktion aufgerufen und genau hier hält der Debugger
end;
Und hier die Funktion, in der die Exception kommt, in einer anderen Unit, wohlbemerkt:

Delphi-Quellcode:
class function TSTDUtils.LittleEndianDateStringToDate(aValue: string): TDateTime;
var
  l_CirculatedDateTime: string;
begin
  l_CirculatedDateTime := Copy(aValue, 7, 2) + FormatSettings.DateSeparator + Copy(aValue, 5, 2)
    + FormatSettings.DateSeparator + Copy(aValue, 1, 4);
  if (Copy(l_CirculatedDateTime, 1, 5) = '00.00') then l_CirculatedDateTime := '01.01.' + Copy(l_CirculatedDateTime, 7, 4);
  result := StrToDate(l_CirculatedDateTime); // Hier tritt vermutlich die Exception auf
end;
Die Exception lautet:
".04.2014" ist kein gültiges Datum.

Und hier nochmals der Aufrufstack:

:7654c42d KERNELBASE.RaiseException + 0x58
:00426dca ConvertErrorFmt + $1E
uSTDExport.TSTDExport.exportMedikament(...)
...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 6. Jul 2015, 15:22
Schalt mal die Debug-DCUs ein.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Sankt Rochus

Registriert seit: 30. Nov 2012
15 Beiträge
 
#8

AW: XE7 Debugger hält bei Exception eine Funktion darüber an.

  Alt 7. Jul 2015, 11:58
Zitat:
Schalt mal die Debug-DCUs ein.
Super! Ich habe gerade eine Exception nachgestellt. Jetzt lande ich beispielsweise bei einer fehlerhaften Konvertierung sogar direkt im ConvertErrorFmt(...), von wo ich mich dann im Aufrufstack hoch hangeln kann über StrToInt() direkt zu meiner Exception auslösenden Funktion. Ich hoffe, dass das die Ursache war, und es jetzt nicht nur ausnahmsweise funktioniert Jetzt macht Delphi wieder Spaß

Vielen Dank dir Uwe!
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz