AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei der Bereichsprüfung

Ein Thema von Rainer Wolff · begonnen am 19. Mär 2019 · letzter Beitrag vom 20. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2      
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

Fehler bei der Bereichsprüfung

  Alt 19. Mär 2019, 14:54
Delphi-Version: 10.2 Tokyo
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?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Fehler bei der Bereichsprüfung

  Alt 19. Mär 2019, 16:01
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.
Heiko
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 13:16
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:
function TOpcUAServer.GetHResultString(HR: HResult): String;
begin
  result:='$'+IntToHex(hr);
  if Statuscodelist.ContainsKey(result) then
    result:=Statuscodelist[result];
end;
Die Log-Funktion selber mit den selben Parametern wird im Erfolgsfall laufend aufgerufen.

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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 13:45
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.
Heiko
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 14:18
auch das hier
Code:
function TOpcUAServer.GetHResultString(HR: HResult): String;
begin
  result:='schei...';
//  result:='$'+IntToHex(hr);
//  if Statuscodelist.ContainsKey(result) then
//    result:=Statuscodelist[result];
end;
bringt einen Fehler bei der Bereichsprüfung, kann also als Ursache ausgeschlossen werden.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 14:19
Wie ist denn ConnectionState deklariert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 14:31
Hallo,
Zitat:
Hier die Zeilen, in denen der Range-Error zuschlägt
Wo denn genau? Welche der 3 Logs ist es?
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.
Heiko

Geändert von hoika (20. Mär 2019 um 14:35 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 14:33
... und wenn die Zeilen mehr als eine Funktion oder Anweisung enthalten aufteilen!
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 14:56
Uwe bekommt den Hauptpreis.

Connectionstate/Statuscode sind UInt32, HRESULT ist ein Longint
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#10

AW: Fehler bei der Bereichsprüfung

  Alt 20. Mär 2019, 14:57
Dann wäre mal zu prüfen, ob diese Werte ConnectionState und statuscode zu HResult passen.

Eventuell tritt der Fehler ja nicht in GetHResultString auf, sondern Werte für den Parameter HR: HResult befinden sich außerhalb des Gültigkeitsbereiches von HResult.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz