Warum fängt Try/Catch nicht alles ab?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

M0rgenstern

Betreff: Warum fängt Try/Catch nicht alles ab?

BeitragDo, März 01, 2012 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,
Ich hab mal eine kurze Frage:
Undzwar ist bei mir grade das Problem aufgetreten, dass ich eventuelle Fehler beim Laden eines Bildes abfangen wollte.
Undzwar so:
BlitzMax: [AUSKLAPPEN]
Try
thisObj.fx = pfx
thisObj.fy = pfy
thisObj.SetImage(LoadAnimImage(pspath, pfwidth, pfheight, piframes))
Catch ex:Object
'Fehlerbehandlung
EndTry


(Also das ganze steht natürlich in ner Funktion)

Jetzt war das Problem, dass ich wohl für pfwidth und pfheight total unmögliche Werte übergeben habe und deshalb in der BMax-internen Funktion "LoadAnim:TImage" der Fehler "Integer divided by Zero" augetreten ist.
Da wollte ich mal nachfragen, warum ich das als fehler geworfen bekomme und das nicht durch das Try/Catch abgefangen wird.

Kann mir das bitte jemand erklären?

Lg, M0rgenstern

ZEVS

BeitragDo, März 01, 2012 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Es handelt sich hierbei um eine EXCEPTION_INT_DIVIDE_BY_ZERO (Windows), die nicht BMax-Intern läuft, sondern vom Betriebssystem kommt (wie auch EXCEPTION_ACCESS_VIOLONTATION, nur zum Beispiel).
Diese werden nicht in eine BMax-Exception umgewandelt (es wäre der Horror, wenn die Programme von BMax-Alphas dadurch weitere Exceptions produzieren und das Betriebssystem lahmlegen - frohes Debuggen).
Durch die Zeile
BlitzMax: [AUSKLAPPEN]
Assert pfwidth*pfheight

verhinderst du die OS-Exception und wirfst einen BlitzMax-Runtimeerror.
ZEVS

M0rgenstern

BeitragDo, März 01, 2012 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, ZEVS.
Ich wusste nicht, dass der Fehler vom Betriebssystem kommt.
Solche Fehler möchte ich dann natürlich nicht abfangen, wenn die auftreten dann ist ja wirklich richtig was schief gelaufen, dann darf es ruhig crashen.

Das mit Assert wusste ich noch gar nicht, also ich kannte den Befehl nicht.
Dann könnte man ja sogar mit Try/Catch und Assert in BMax testgetrieben arbeiten.

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group