Seite 1 von 1

OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Verfasst: 29.11.2023 08:14
von stevie1401
OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Code: Alles auswählen


  Procedure ErrorHandler()
    MessageRequester("OnError Test", "Der folgende Fehler trat auf: " + ErrorMessage())
  EndProcedure

  MessageRequester("OnError Test", "Test starten")

  OnErrorCall(@ErrorHandler())
  ;PokeS(10, "Hello World") ; verursacht einen #PB_OnError_InvalidMemory Fehler
  
  Dim a(10)
  For i=1 To 20  ;Speicherüberlauf
    a(i)=i
  Next i
  
  
  
  MessageRequester("OnError Test", "Dies sollte niemals angezeigt werden")

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Verfasst: 29.11.2023 09:58
von dige
Mach mal For i=1 To 2000 ;Speicherüberlauf

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Verfasst: 29.11.2023 10:36
von stevie1401
Danke für den Tip, damit scheint es zu funktionieren.
Nur hilft mir das nicht ernsthaft weiter.
Wenn mein Programm abstürzt, weil ich ein Array zu klein dimensioniert habe, dann muss ich das auch wissen, wenn es nur um 1 zu klein ist.

Aber ok, erst mal vielen Dank für die Info :)

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Verfasst: 29.11.2023 12:26
von jacdelad
ArraySize() ist dein Freund. Aber Vorsicht, es ist etwas Tricky, weil, anders als bei Listen, is das Ergebnis, das letzte Element. Wenn also 5 rauskommt, dann hat dein Array Elemente von 0 bis 5, also insgesamt 6. Funktioniert wie bei Dim.
https://www.purebasic.com/german/docume ... ysize.html

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Verfasst: 29.11.2023 13:44
von dige
@stevie: dafür ist aber eigentlich der Debugger da und der erkennt ja auch schon den (kleinen) Array-Überlauf. OnErrorCall() ist ja eher für das fertige compilierte Programm.
Du kannst da aber noch mit PurifierGranularity(1, 1, 1, 1) nachschärfen. Damit wird nach jeder Codezeile geprüft. Damit finde ich meist auch kleinere Lecks..

Re: OnErrorCall(@ErrorHandler()) funktioniert so nicht. Warum?

Verfasst: 01.12.2023 07:22
von stevie1401
Ich danke euch :)