![]() |
Delphi-Version: 10.2 Tokyo
Fehler bei der Bereichsprüfung
Hallo, wer kann mir vielleicht noch Tipps zur Fehlersuche geben:
Ich habe die Bereichsprüfung (Range Checking) im Projekt aktiviert. Die sollte ja anschlagen, wenn ich irgendwelche Arraygrenzen verletze, soweit klar. Meine Anwendung kommuniziert ständig (mittels einer C-dll) mit einer Steuerung. Wenn ich die Netzwerkverbindung unterbreche, erhalte ich diesen netten Fehler bei der Bereichsprüfung. Blos, da wo der Debugger stehen bleibt, ist nix von einem Array zu sehen. An der Stelle wird eine Fehlermeldung in eine Logdatei geschrieben, dazu ein Fehlercode ueber ein Dictionary in einen Text konvertiert. Die Konvertierung mit Dictionary habe ich schon komplett rausgenommen (result:=''), Fehler kommt trotzdem. Die Fehlermeldung wird bereits beim hineinsteppen (F7) in die Funktion ausgelöst, also keine Moeglichkeit, da noch etwas genauer zu debuggen. Wie kann ich den Fehler eingrenzen? |
AW: Fehler bei der Bereichsprüfung
Hallo,
dann kann es ein Übergabe-Parameter der Funktion sein. Wie sieht denn der Aufruf Deiner Funktion aus? RangeCheck kann auch durch Strings hervorgerufen werden. S,S1: String; S:= '123'; S1:= S[10]; -> Puff Hier hilft vielleicht auch MadExcept etwas. |
AW: Fehler bei der Bereichsprüfung
Hier der Funktionsaufruf:
Hier die Zeilen, in denen der Range-Error zuschlägt
Code:
if ConnectionState<>UA_STATUSCODE_GOOD then log(llError,format('UA_Client_connect failed ConnectionState %s',[GetHResultString(ConnectionState)])) else log(llBlack,format('UA_Client_connect connected ConnectionState %s',[GetHResultString(ConnectionState)])); if statuscode<>UA_STATUSCODE_GOOD then log(llError,format('UA_Client_run_iterate failed Statuscode %s',[GetHResultString(statuscode)]))
Code:
Die Log-Funktion selber mit den selben Parametern wird im Erfolgsfall laufend aufgerufen.
function TOpcUAServer.GetHResultString(HR: HResult): String;
begin result:='$'+IntToHex(hr); if Statuscodelist.ContainsKey(result) then result:=Statuscodelist[result]; end; Zum Umfeld: Ich benutze eine C-Dll, um aus Delphi mit einem OPCUA-Server zu kommunizieren. Timer-gesteuert wird laufend eine Dll-Funktion angestoßen, um die Kommunikation zu am Leben zu erhalten. Bekomme ich einen Kommunikationsfehler, schreibe ich die entsprechende Log-Meldung raus. Geht mir nun die Kommunikation flöten (passiert laufend, während die zugehörige Steuerung programmiert wird, oder halt auch wenn ich das Netzwerkkabel ziehe), dann beglückt mich diese Bereichsprüfungsmeldung, die an der Anlage blöd aussieht. Deaktiviere ich die Bereichsprüfung, läuft alles wunderbar, die Kommunikation setzt wieder auf. |
AW: Fehler bei der Bereichsprüfung
Hallo,
das hier könnte die Stelle sein Statuscodelist[result]; Hier hilft erst mal ein beherztes try except um den ganzen Code. Aber ich würde die Ursache finden. |
AW: Fehler bei der Bereichsprüfung
auch das hier
Code:
bringt einen Fehler bei der Bereichsprüfung, kann also als Ursache ausgeschlossen werden.
function TOpcUAServer.GetHResultString(HR: HResult): String;
begin result:='schei...'; // result:='$'+IntToHex(hr); // if Statuscodelist.ContainsKey(result) then // result:=Statuscodelist[result]; end; |
AW: Fehler bei der Bereichsprüfung
Wie ist denn ConnectionState deklariert?
|
AW: Fehler bei der Bereichsprüfung
Hallo,
Zitat:
Was passiert, wenn du nicht mitloggst, also die Zeilen mal komplett ausklammerst. Es könnte auch sein, dass intern Speicher zerschossen wird -> FastMM4. Vielleicht zerschießt ja die Dll den Speicher. |
AW: Fehler bei der Bereichsprüfung
... und wenn die Zeilen mehr als eine Funktion oder Anweisung enthalten aufteilen!
|
AW: Fehler bei der Bereichsprüfung
Uwe bekommt den Hauptpreis.
Connectionstate/Statuscode sind UInt32, HRESULT ist ein Longint |
AW: Fehler bei der Bereichsprüfung
Dann wäre mal zu prüfen, ob diese Werte
Delphi-Quellcode:
zu
ConnectionState und statuscode
![]() Eventuell tritt der Fehler ja nicht in
Delphi-Quellcode:
auf, sondern Werte für den Parameter
GetHResultString
Delphi-Quellcode:
befinden sich außerhalb des Gültigkeitsbereiches von HResult.
HR: HResult
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 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 by Thomas Breitkreuz