Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#9

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 15:14
Der Grund des Problemes ist doch eigentlich egal, 'ne nichtssagende Meldung über eine Zugriffsverletzung sollte der Anwender nicht zu Gesicht bekommen.

Statt dessen könnte man ja versuchen den Fehler abzufangen und z. B. eine Meldung ala "Fehler bei der Programminitialisierung, bitte das Programm neu starten." oder sowas ausgeben. Eine Fehlermeldung mit Hilfe von JCLDebug kann einem dann sogar sagen, wo der Fehler aufgetreten ist. Das könnte dann z. B. so in der Art aussehen (MessageDLG):
Code:
---------------------------
Fehler
---------------------------
Zugriffsverletzung bei Adresse 00455BF2 in Modul 'LogFileViewer.exe'. Lesen von Adresse 00000198

Fehlertyp: EAccessViolation
Sender: fmMainLogFileViewer [TfmMainLogFileViewer]

11.07.2021 14:45:20

Dateiname: LogFileViewer.exe
Fehleradresse: 00054BF2

Unit: Controls
Fehleradresse: 00455BF2
Modulname: Controls

Prozedur: TWinControl.GetControlCount
Prozeduroffset: 2
Zeilennummer: 0
Zeilenoffset: 0
---------------------------
OK  
---------------------------
(Logfile)
Code:
LogFileViewer | 2021.07.10 15.40.20,976 | Dateiname            : LogFileViewer.exe
LogFileViewer | 2021.07.10 15.40.20,976 | Fehlermeldung        : Zugriffsverletzung bei Adresse 00455BF2 in Modul 'LogFileViewer.exe'. Lesen von Adresse 00000198
LogFileViewer | 2021.07.10 15.40.20,976 | Fehlerklasse         : EAccessViolation
LogFileViewer | 2021.07.10 15.40.20,976 | Fehlerauslöser       : pc
LogFileViewer | 2021.07.10 15.40.20,976 | Klassenname          : TPageControl
LogFileViewer | 2021.07.10 15.40.20,976 | Unit                 : Controls
LogFileViewer | 2021.07.10 15.40.20,976 | Fehleradresse        : 00455BF2 (00054BF2)
LogFileViewer | 2021.07.10 15.40.20,976 | Modulname            : Controls
LogFileViewer | 2021.07.10 15.40.20,976 | Prozedur             : TWinControl.GetControlCount
LogFileViewer | 2021.07.10 15.40.20,976 | Prozeduroffset       : 2
LogFileViewer | 2021.07.10 15.40.20,976 | Modul                : 4194304 [400000]
oder aus 'nem anderen Programm:
Code:
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Dateiname            : FireFoxVerwaltung.exe
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehlermeldung        : Connection is not opened yet
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehlerklasse         : EZDatabaseError
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehlerauslöser       : tmStart
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Klassenname          : TSpecialTimer
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Unit                 : ZAbstractConnection
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehleradresse        : 005FCE4F (001FBE4F)
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Modulname            : ZAbstractConnection.pas
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Prozedur             : TZAbstractConnection.CheckConnected
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Prozeduroffset       : 31
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Zeilennummer         : 942
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Modul                : 4194304 [400000]
Mit der Angabe von Unit ZAbstractConnection und Zeilennummer 942 weiß man dann schon sehr genau, wo es hakt. Und die Fehlermeldung Connection is not opened yet sagt einem dann auch schon recht genau, was da wohl falschgelaufen ist. Beim Fehlerauslöser handelt es sich hier um die Prozedur tmStart. Damit hat man dann auch die passende Stelle, an der man zum Debuggen mal mit dem Setzen eines BreakPoints anfangen kann.

Das hilft dann bestimmt auch dabei herauszufinden, ob es sich wirklich um das vermutete Netzwerkproblem handelt oder eventuell doch was Anderes dazwischenschießt.

Man kann dann im Dialog direkt einen Abbrechenbutton statt eines OK-Buttons einbauen, der beim Wegklicken das Programm auf jeden Fall beendet.

Per ShellExecute könnte man dann sogar das Programm sich selbst starten lassen.

Achso:
Die Fehlerausgabe aus der JCLDebug sieht nicht so aus, sie stellt lediglich die entsprechenden Informationen zur Verfügung, das Aussehen der Fehlermeldung bzw. der Logausgabe muss man dann schon selbst machen. Oder halt den Exceptiondialog aus der JCL nutzen: https://www.delphipraxis.net/1326309-post19.html oder selbermachen https://www.delphipraxis.net/1326340-post26.html
  Mit Zitat antworten Zitat