OnErrorCall mit CloseDatabase(id)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

OnErrorCall mit CloseDatabase(id)

Beitrag von marcelx »

Hallo zusammen,

ich teste gerade wie ich Abstürzt mein Programm mit z.B. CloseDatabase() abfangen kann
Beim kompilieren bekomme ich die Fehlermeldung "Das angegebene #Database ist nicht initialisiert" und die Procedure ErrorHandler() wird nicht aufgerufen.
Erzeuge ich ein exe-Datei und starte diese dann gibt es kein Messsage.
Mit Verwendung von RaiseError() funktioniert.

Wie kann nicht solche Fehler abfangen?

Danke und Gruß MarcelX

Code: Alles auswählen

UseSQLiteDatabase()
 
Procedure test(id)
   CloseDatabase(id)
EndProcedure

Procedure ErrorHandler()
  ErrorMessage$ = "A program error was detected:" + Chr(13) 
  ErrorMessage$ + Chr(13)
  ErrorMessage$ + "Error Message:   " + ErrorMessage()      + Chr(13)
  ErrorMessage$ + "Error Code:      " + Str(ErrorCode())    + Chr(13)  
  ErrorMessage$ + "Code Address:    " + Str(ErrorAddress()) + Chr(13)
 
  If ErrorCode() = #PB_OnError_InvalidMemory   
    ErrorMessage$ + "Target Address:  " + Str(ErrorTargetAddress()) + Chr(13)
  EndIf
 
  If ErrorLine() = -1
    ErrorMessage$ + "Sourcecode line: Enable OnError lines support to get code line information." + Chr(13)
  Else
    ErrorMessage$ + "Sourcecode line: " + Str(ErrorLine()) + Chr(13)
    ErrorMessage$ + "Sourcecode file: " + GetFilePart(ErrorFile(), #PB_FileSystem_NoExtension) + Chr(13)
  EndIf
  
  ErrorMessage$ + "Adress instruction: " + InstructionAddress() + Chr(13)
  ErrorMessage$ + "Adress string: " + InstructionString() + Chr(13)
    
  ErrorMessage$ + Chr(13)
 
  MessageRequester("OnError example", ErrorMessage$)
  End
 
EndProcedure
 

OnErrorCall(@ErrorHandler())

test(7)
; RaiseError(#PB_OnError_IllegalInstruction)
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: OnErrorCall mit CloseDatabase(id)

Beitrag von Kiffi »

Das ErrorHandler-Gedönse würde ich mir sparen.

Prüfe vor dem CloseDatabase() mit IsDatabase(), ob es sich um eine gültige id handelt.

Und prüfe generell bei allen Database-Befehlen den Rückgabewert. Dann sollte Dein Code auch nicht mehr abstürzen.
a²+b²=mc²
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: OnErrorCall mit CloseDatabase(id)

Beitrag von marcelx »

Danke für dein Antwort.
CloseDatabase(id) war nur ein Beispiel.
Ein Fehler hatte ich schon, weil ich versehentlich den id geändert hatte
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: OnErrorCall mit CloseDatabase(id)

Beitrag von Kiffi »

marcelx hat geschrieben: 02.02.2022 14:38Ein Fehler hatte ich schon, weil ich versehentlich den id geändert hatte
auch hier könntest Du dann mit IsDatabase() vor jedem Datenbank-Befehl prüfen, ob die id gültig ist.
a²+b²=mc²
Antworten