OnError-Ereignisse

Fragen und Bugreports zur PureBasic 4.0-Beta.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

OnError-Ereignisse

Beitrag von Sven »

Welche Fehler werden eigentlich bei OnError in PB4beta gemeldet?

Bis jetzt ist es mir nur gelungen, Division durch Null zu erzeugen. Das Beispiel aus der Hilfe zu SetErrorNumber() mit 53 für FileNotFound geht nicht, da kommt "Unknown Error". Und der InvalideMemoryAccess nach Int() in beta8 wird auch nicht abgefangen, ohne Debugger an wird das Programm einfach beendet.

Eine Liste der verfügbaren Fehlermeldungen in der Hilfe wäre schön. Der Versuch einer Auflistung mit

Code: Alles auswählen

Procedure ErrorHander()
  PrintN("Number " + Str(GetErrorNumber()))
  PrintN("Descrpt " + GetErrorDescription())
EndProcedure

OnErrorGosub(@ErrorHander())

If OpenConsole()
  For k.l = 0 To 255
    SetErrorNumber(k)
    PrintN("")
  Next
  PrintN("Return zum Beenden.")
  Input()
EndIf
geht nicht, das Programm kommt nicht weit. ;-)

Sven
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

Hast Du folgendes berücksichtigt:
  • Das ganze funktioniert nur, wenn der Debugger ausgeschaltet ist!
  • Wenn Du die Funktionen GetErrorModuleName() und GetErrorLineNR() verwendest must Du außerdem in den Compiler Optionen "Enable OnError lines support" aktivieren.
cu, helpy
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Klar, hab ich, sonst würde es ja gar nicht gehen. Übrigens schmiert mit PB4b8 bei gleichzeitiger Verwendung von OnError, SetErrorNumber und dem Debugger das Programm immer sofort ab. Ist das normal oder ist das eines der neuen "Features" von PB4? Ich hab bei 3.9 nie mit On Error gearbeitet...

Ich habe inzwischen ausgehend von der Fehlernummer bei "Divison durch Null" (so um -10 Millionen irgendwas) noch ein paar andere Fehlernummern gefunden. Aber da die Fehlernummer ein Long ist, würde es ewig dauern, alles durchzutesten. ich häte nur gern gewußt, welche Fehler gemeldet werden, "InvalideMemoryAccess" scheint nicht dabei zu sein, "FileNotFound" aber auch nicht...

Sven
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Funktioniert hier alles super, musst nur die richtigen Konstanten kennen ;)
#EXCEPTION_...

Code: Alles auswählen

Procedure ErrorHander() 
  PrintN("Number " + Str(GetErrorNumber())) 
  PrintN("Descrpt " + GetErrorDescription()) 
EndProcedure 

OnErrorGosub(@ErrorHander()) 

If OpenConsole() 
  SetErrorNumber(#EXCEPTION_ACCESS_VIOLATION) 
  PrintN("Return zum Beenden.") 
  Input() 
EndIf
Gesperrt