![]() |
Zugriffsverletzung ausfindig machen
'loha Folks,
immer wieder taucht folgende Fehlermeldung auf, deren Ursprung mir sehr schleierhaft ist: Zugriffsverletzung bei Adresse 0056155 in Modul 'FACTS.exe'. Lesen von Adresse 00000000. Kann ich irgendwie auf schnellem Weg ausfindig machen, woher diese Fehlermeldung stammt, bzw. weshalb sie ausgelöst wird? Einzelne Anweisungen abzuarbeiten (F7) würde in stunden- wenn nicht sogar tagelangem "die-selbe-Taste-Drücken" enden. Trotz der Fehlermeldung funktionieren sämtliche Abläufe fehlerlos. Grüsse hirnstroem |
Re: Zugriffsverletzung ausfindig machen
Dugreifst auf eine nicht Intantieertes Objekt zu.
|
Re: Zugriffsverletzung ausfindig machen
Und um die Stelle zu finden benutzt man Tools wie MadExpert oder Eurekalog.
Dann bekommst du einen CallStack und kannst sehen, wo die Zugriffsverletzung aufgetreten ist. |
Re: Zugriffsverletzung ausfindig machen
Und einfach mal in den Debugger-Optionen ankreuzen, das Delphi bei einer Exception anhalten soll. Dann zeigt die IDE dir sogar genau die Zeile, wo das auftritt.
[edit] und über die Debugger-Fenster->Call Stack siehst Du dann auch eventuell den Grund dafür[/edit] |
Re: Zugriffsverletzung ausfindig machen
madExcept habe ich bereits versucht, wenn es aktiv ist, tritt der Fehler gar nicht mehr auf. Dies ist natürlich nicht wirklich zufriedenstellend.
Dass der Debugger auf Exceptions reagieren und die Applikation anhalten soll, weiss er. Werde mir Eurekalog noch zu Gemüte führen. Danke und Grüsse hirnstroem |
Re: Zugriffsverletzung ausfindig machen
Den Ort der Entstehung habe ich gefunden, weshalb der Code Fehler ausspuckt bleibt mir hingegen noch immer ein Rätsel:
Delphi-Quellcode:
function HexStrToInt(str: string): integer;
var ColorInteger: integer; Einer, Zehner: Integer; ColorString: string; HexString: String; begin Einer:=0; Zehner:=0; HexString:=str; if Length(HexString)=2 then begin try ColorString:=copy(HexString,length(HexString)-1,2); except end; if ColorString[1] in ['0'..'9'] then Zehner:= Ord(ColorString[1]) - 48 else if ColorString[1] in ['A'..'F'] then Zehner:= Ord(ColorString[1]) - 55; if ColorString[2] in ['0'..'9'] then Einer:= Ord(ColorString[2]) - 48 else if ColorString[2] in ['A'..'F'] then Einer:= Ord(ColorString[2]) - 55; end else // length =1 begin try ColorString:=copy(HexString,length(HexString),1); except end; Zehner:=0; if ColorString[1] in ['0'..'9'] then Einer:= Ord(ColorString[1]) - 48 // hier tritt der Fehler auf else if ColorString[1] in ['A'..'F'] then Einer:= Ord(ColorString[1]) - 55; end; ColorInteger:=16*Zehner+Einer; Result:=ColorInteger; end; |
Re: Zugriffsverletzung ausfindig machen
Evtl. ist der String leer.
|
Re: Zugriffsverletzung ausfindig machen
Möglich wärs, habe die entsprechende Stelle jetzt einfach mit einen try except Block verpackt, dann passt das schon.
|
Re: Zugriffsverletzung ausfindig machen
Zitat:
Delphi-Quellcode:
abzufangen. Zugriffsverletzungen müssen nicht sein!
if Length( ColorString) = 1 then begin
.... end; Gruß Jörg |
Re: Zugriffsverletzung ausfindig machen
Vielleicht kann man den Fehler auch anders umgehen:
Delphi-Quellcode:
Oder übersehe ich da etwas?
Value := StrToIntDef('$' + str, 0);
Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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