Fehlerbehandlung
Übersicht

![]() |
EingeproggtBetreff: Fehlerbehandlung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Servus,
ich grüble den ganzen Nachmittag herum, wie man wohl am besten mit Fehlern umgeht in BB. Weiß nicht ob ich darüber lachen oder weinen soll dass mir das erst jetzt ein Problem wird. Aber nachdem ich Exceptions von Java kennen gelernt hab fällt mir der umgang mit BB richtig schwer diesbezüglich ![]() Folgende Möglichkeiten sehe ich in BB: RuntimeError ![]() ![]() Dafür wäre das nur eine bequeme Zeile. Irgendwelche Versuche, Fehler auszubessern oder versuchen damit zu leben auch wenn dann was falsches raus kommt... immer noch besser als Programmabsturz, aber halt auch irgendwie blöd... noch dazu wo man den User dann ja nicht darüber informiert was schief gelaufen is. Return ![]() ![]() Ich habs so weit gedreht, dass die 0 für "Fehler" in allen Funktionen "weiter geleitet" wird, so dass man am Ende immer noch ganz bequem auf 0 prüfen kann und im besten Fall in einer globalen Variable eine Fehlerbeschreibung hat. Aber auch das "Weiterreichen" der Rückgabewerte is mühsam... Also zur Veranschaulichung: BlitzBasic: [AUSKLAPPEN] Function a() (und natürlich Aufruf von b() ist hier interessant) Was macht ihr so bzw. würdet ihr mir empfehlen? Also mein Ziel wäre, dass Fehler möglichst gut beschrieben ausgespuckt werden und das Programm im Fehlerfall aber nicht zwangsläufig krachen geht. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest ein Logfile schreiben - das ist zumindest super, um die Fehler zurück zu verfolgen.
Falsche Benutzereingaben sollten zumindest keinen Absturz verursachen - ein Infofenster, sollte nicht zu schwer zu realisieren sein, das wäre aber nicht zwangsweise nötig. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
DebugLog währe wohl das beste(Leider sieht das der Benutzer nicht) ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Logfile ist auch eine feine Idee, stimmt. Dann muss der User halt selbst nachforschen was er falsch gemacht hat, dafür hätte er die meisten Infos.
@Freak: Debuglog kenn ich, gibts sogar in B3D auch ![]() ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso ![]() Der Benutzer muss halt wissen, dass es eine Logfile gibt ![]() |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das kommt immer auf den Fehler drauf an, wie Du da reagieren solltest.
Also "fatale" Fehler, wie dass z.B. eine Datei nicht geladen werden kann dürfen durchaus zu einem RuntimeError mit entsprechender Meldung (inkl. Dateiname!) führen, da es ja früher oder später eh zu einer MAV kommen würde. Wenn z.B. das Netzwerk nicht initialisiert werden kann, wäre eine Benutzermeldung angebracht, das Spiel müsste aber nicht unbedingt gleich komplett abstürzen. Auf Fehler wie z.B. dass der Spieler an eine Position gekommen ist an die er nicht kommen sollte muss normalerweise nicht reagiert werden. Falls soetwas vermehrt auftritt ist im Idealfall der Bug zu korrigieren anstelle durch Code das Ding zu umgehen... |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sinnvolle Fehlerbehandlung?
Da kann ich nur den wenig hilfreichen Tipp geben, von Blitz wegzukommen ![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pac-Man, wo soll die Fehlerbehandlung denn besser sein?
Sehr off-Topic. Das einzige unter jeder Programmiersprache, ist ordentlich zu coden. Egal welche Programmiersprache, wenn man Programme hat, die mehrere Hundert Leute täglich anwenden ist so etwas, wie Programm läuft trotz fehler weiter nicht AKZEPTABEL. ein Programmabsturz ist kein Problem, wenn der Supporter an der Absturzmeldung erkennt, woran es liegt. und leider nützen da Standard Meldungen nix. Oder, was denkt denkt, mann wenn da eine 60 Jahre alte frau, aus ihren erinnerungen eine Englische Meldung ansagt -- epic Fail. Fehler müssen voim Programmierer abgefangen werden, dort wo sie passieren können und ordentlich angezeigt werden. |
||
between angels and insects |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fehler sollten nur zum Programmabsturz führen, wenn sie fatal sind. Für alles andere gibt es Error-Logs. Man denke sich, was passieren würde, wenn Microsoft Word abstürzen würde nur weil man keine gültige Schriftfarbe ausgewählt hat. Wusch, Dokument weg, da bringt auch der beste Support nichts.
Programme sollten irgendwie kommunizieren, dass es ein Problem gab, da stimme ich dir zu. Aber sie sollen es nicht gleich so zelebrieren. |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jau, Fehler selbst abfangen, immer prüfen, ob alles, was so von "außen" kommt auch so stimmt, wie es ist (und nicht erst, wenn das Programm schon halb fertig ist, sonst wird das ein Haufen Arbeit...).
Wenn's nicht stimmt, Fehler ins Log, und dann muss es ja vielleicht nicht gleich mit MAV enden, sondern mit einer "eigenen Fehlerausgabe", so das man z.B. zurück ins Hauptmenü geworfen wird, wo dann in einem Fensterchen ein Fehler steht. Ansonsten vermisse ich ja auch Try/Catch in BB ![]() |
||
Starfare: Worklog, Website (download) |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jap, klar, wenn eine Schriftart fehlt, sollte es nicht abstürzen, Aber eine Message sollte komme, mit "Schriftart xy konnte nicht geladen werden."
Try und Catch ist das BÖSESTE überhaupt! Es gibt für BB einen API aufruf, der ein Notify macht, also, Nachricht, ohne abzustürzen, dass wäre meine Waffe, der wahl, bei der Kommunikation mit dem Nutzer. |
||
between angels and insects |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, ich finde Try/Catch ist schon ganz angenehm. In BB handhabe ich das so, dass wenn z.B. beim Laden eines Levels ein Fehler auftreten kann, die Ladefunktion eine globale Fehler$ mit einem Fehlerstring versieht, und alle nachfolgenden Funktionen dann prüfen, ob der Fehlerstring leer ist, und wenn nicht, einfach abbrechen. In der Hauptschleife wird dann die entsprechende Fehleranzeige ausgelöst (aber ohne RuntimeError, z.B. auf einem Fenster der Ingame-GUI), so kann der Spieler dann versuchen, ein anderes Level zu laden. | ||
Starfare: Worklog, Website (download) |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jan_ hat Folgendes geschrieben: Try und Catch ist das BÖSESTE überhaupt! Woher nimmst du denn diese Behauptung?
Try und Catch sind genau dazu da, Code gegen eventuell auftretende Fehler zu sichern, und zwar ohne dass a) gleich das gesamte Programm abstürzt oder man b) in jede einzelne Zeile eine eigene If/Then-Abfrage o.ä. schreiben muss. Genau das sind die beiden hässlichen Varianten, die Eingeproggt auch im Startpost beschrieben hat. Findest du die etwa gut?? Mir fällt leider auch keine sehr gute Methode ein, was man da in BB machen könnte; zumindest um die ständige Abfrage wirst du wohl nicht herumkommen... |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, wie gesagt sollte abhängig vom Fehler reagiert werden und man sollte dabei die Kirche auch im Dorf lassen. BlitzBasic ist schließlich für Computerspiele gedacht und nicht für Mond-Missionen... Am Schluß fängt man sich durch unnötige Fehlerbehandlung und den dadurch unübersichtlicheren Code noch einen blöden Bug ein. | ||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß nicht, wie weit eure Antworten noch zu meiner Frage gehören oder ob da schon die ersten "Paradigmen-Kriege" zwischen Java und BB in den Startlöchern stehen - ich antworte trotzdem auch mal ![]() @Try-Catch: Klar ist es nicht das Allheilmittel und schon gar nicht sollte man Dinge, die keine Fehler sind damit behandeln! Aber in einigen Fällen - und um genau die geht es mir - ist try-catch das Mittel der Wahl. Man nehme folgendes Beispiel: BlitzBasic: [AUSKLAPPEN] Function machwas(x.Type) Das soll ein extrem gekürztes Beispiel einer Rekursion sein. Egal ob Rekursion oder das Abarbeiten von hunderten und tausenden Einträgen... überall darauf zu achten ob Ergebnis=0 ist nicht nur für den Programmierer, auch (in gaaaanz geringem Umfang) für den Rechner umständlich. Statt Return 0 wäre hier ein "throw exception" doch sehr angebracht. Ich gehe sogar soweit, zu überlegen ob sich nicht mittels GoTo ein ähnliches Verhalten hinbiegen lässt... Aber keine Angst, das soll nur eine weitere Option aufzeigen die ich aber NICHT verfolge. Weil dass Goto böse is da sind wir uns alle einig ![]() @BigBug: Bin ganz deiner Meinung... nur tendiere ich dazu, BB als "nicht-Spiel-Sprache" zu missbrauchen ^^ (Ganz einfach weil man für Spiele kreativ sein muss und in der heutigen Zeit graphische Leckerbissen servieren muss - beides liegt mir nicht ![]() @Alle: Ich habs mehr oder weniger gelöst... mit einer Mischung aus all euren Beiträgen ![]() mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde Recursion auch nicht unbedingt verwenden, weil sie schwer zu teilen ist und den CPU Stack stark belastet. In Recursion gibt es bei BB oft Probleme, mit Weitergabe der Rückgabewerte. Du solltest dafür einen Typen anlegen, wo alle weiterschritte drinne gespeichert sind.
In Bmax, eine Liste. |
||
between angels and insects |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group