Sinnvolles Debugging, oder einfach nur Verschwendung?

Für allgemeine Fragen zur Programmierung mit PureBasic.
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Sinnvolles Debugging, oder einfach nur Verschwendung?

Beitrag von sbehrens »

Hi @ all,
ich benutze in meinen Programmen immer noch Abfrageroutinen (wie auch immer die heißen), die bei einem Fehler einen

Code: Alles auswählen

MessageRequester()
öffnen, um den Fehler zu melden. Jezt ist meine Frage; Braucht man bei Funktionen wie

Code: Alles auswählen

OpenWindow
oder

Code: Alles auswählen

CreateGadgetList()
überhaupt eine dieser Abfrageroutinen. zB:

Code: Alles auswählen

hWnd=OpenWindow(...)
If hWnd
  If CreateGadgetList(...)
    ...
  Else
    MessageRequester("Error","CreateGadgetList()")
    End
  EndIf
Else
  MessageRequester("Error","OpenWindow()")
  End
EndIf
Sollte man das nur zum Debuggen benutzen, und dann in der Finalen Version auskommentieren. (In der *.exe) Oder ist diese Sicherheitsabfrage sinnlos, da Windows2k und WindowsXP mit ziemlich großer Wahrscheinlichkeit schaffen, ein Fenster zu öffnen. Ist das nur für Linux-Programme zu gebrauchen? (Habe ich noch nie gemacht.) Oder wird hierdurch das Programm sogar (wenn auch nur minimal) bemerkbar langsamer? (Was ich mir nicht vorstellen kann.)
Thx im Voraus

mfG
Basti
enjoy life... while you can!
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Bei Windowsanwendungen würd ich persönlich das nicht so eng sehen. Aber wenn es dann an Direct X geht, muss das auf jeden Fall her. Denn nur wenn DirectX (>= 7) drauf ist, kann auch ein Screen geöffnet werden. Da muss auf jeden Fall eine Abfrage rein. Bei so simplen Fensterprogrammen benutz ich sowas eigentlich weniger. Aber, man kann nie sicher genug sein. Besser vorsorgen als nachher den Fehler suchen und nicht finden. Also schaden kann es schonmal nicht. :wink:
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag von sbehrens »

Stimmt, bei Windows weiß man ja nie... was da alles passieren kann! :lol: Okay, bei DirectX auf jeden Fall... Dann mach ich das einfach weiter, Safety First halt, ne?. :)

mfG
Basti
enjoy life... while you can!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Für sowas benutze ich immer häufiger eine einfache Error-Procedure:

Code: Alles auswählen

Procedure IsError(ProcResult.l, ErrorText.s)
  If ProcResult = 0
    MessageRequester("Error", ErrorText, #MB_ICONERROR)
    End
  EndIf
  ProcedureReturn ProcResult
EndProcedure

IsError(OpenWindow(0, 0, 0, 400, 300, 0, "ErrorTest"), "Fenster konnte nicht erstellt werden.")

IsError(CreateGadgetList(0), "Gadgetliste konnte nicht erstellt werden")
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

also wenn nicht mehr genug speicher zur verfügung steht um ein normales fenster zu öffnen, wird der anwender dein messagerequester auch nicht mehr sehen... sowas wird aber sicher nicht vorkommen. ich baue sicherheitsabfragen immer da ein, wo ich mir vorstellen kann das was schiefgeht.
openscreen kann auf jeden fall schiefgehen, weil wie schon erwähnt möglicherweise nicht die richtige directx version da ist. also bei allen directx basierten sachen vorsichtshalber zumindest bei der initialisierung testen (zb auch bei init keyboard).

aber bei so sachen wie den normalen fensterfunktionen (also auch menüfunktionen, windowmouse, etc) ist eine abfrage überflüssig. das funktioniert entweder oder nichts funktioniert mehr ;)
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Zaphod hat geschrieben:also wenn nicht mehr genug speicher zur verfügung steht um ein normales fenster zu öffnen, wird der anwender dein messagerequester auch nicht mehr sehen
Sagt wer. Genau dafür sind die Messagerequester gedacht.

Edit: Abgesehen gehört es einfach zur sauberen Programmierung...
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

NicTheQuick hat geschrieben:Für sowas benutze ich immer häufiger eine einfache Error-Procedure:

Code: Alles auswählen

Procedure IsError(ProcResult.l, ErrorText.s)
  If ProcResult = 0
    MessageRequester("Error", ErrorText, #MB_ICONERROR)
    End
  EndIf
  ProcedureReturn ProcResult
EndProcedure

IsError(OpenWindow(0, 0, 0, 400, 300, 0, "ErrorTest"), "Fenster konnte nicht erstellt werden.")

IsError(CreateGadgetList(0), "Gadgetliste konnte nicht erstellt werden")
Nu packst du das schon in sone schöne Proc und probierst es dann nichtmal aus, schließlich muss es "CreateGadgetList(WindowID(0))" heißen. Oder man macht es so wie ich:
CreateGadgetList(OpenWindow(0, 0, 0, 400, 300, 0, "ErrorTest"))
Aber es haben sich schon einige Leute über den schlechten Codestil beschwert, auch wenn ich das so viel besser finde.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Den Fehler habe ich bewusst gemacht, damit man auch sieht, was die Procedure macht, wenn sie mal aufgerufen wird. Also das war schon alles getestet. :wink:
Kristel
Beiträge: 72
Registriert: 30.08.2004 00:17

Beitrag von Kristel »

Will mich jetzt mal nicht über den Sinn und Unsinn von solchem Debugging streiten, aber ein sinnvolles Anwendungsbeispiel hätte ich auch auf Lager. Irgendein Programm legt während der Laufzeit eine Datei im gleichem Verzeichniss an. Da das Programm aber nicht weiß ob es sich beim Verzeichniss um die Festplatte oder eine CD handelt, kann es passieren das Windows das mit einer Fehlermeldung quittiert. Es währe für den Anwender bestimmt leichter Nachzuvollziehen warum jetzt eine Datei nicht angelegt wurde, wenn eine leicht zu verstehende Fehlermeldung vom Programm kommt. Dafür muss man eigentlich nur eine kleine Procedure schreiben, die abprüft ob das schreiben auf dem Datenträger möglich ist oder nicht.
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag von sbehrens »

Also generell für Fenster etc. und so kein Debugging (für "kleine Sachen"), bei DirectX und anderen File-Zugriffen, wo ein Fehler schwerwiegende Folgen haben könnte, ist es wohl sehr sinnvoll, zu Debuggen. Verständlich. Alles Klar, vielen Dank!

mfG
Basti
enjoy life... while you can!
Antworten