Seite 1 von 1

Programmabsturz durch Benutzereingabe erzeugen

Verfasst: 26.05.2014 22:10
von SBond
Hi Leute,

das klingt ein wenig komisch, aber ich versuche eine kleine GUI zu erzeugen, die bei Eingabe von Sonderzeichen oder zu langen Namen abstürzt.
Wie stelle ich das am besten an? Ich möchte dies nutzen, um die Auswirkungen von Programmierfehlern zu demonstrieren. Kennt jemand so ein richtig groben Fehler, mit dem man einen Absturz provoziert? In C++ sind Programmierfehler wohl einfacher umzusetzen, als in PureBasic :D

Code: Alles auswählen

Procedure Button()
	MessageRequester("String",GetGadgetText(0))
	
; 	....hier soll ich abstürzen, wenn der Name länger als 15 Zeichen ist, oder sonderzeichen enthält...
EndProcedure

If OpenWindow(0, 0, 0, 322, 105, "lass mich Abstürzen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  	StringGadget(0, 8,  10, 306, 20, "Name eingeben")
  	ButtonGadget(1,8,50,300,30,"ok")
  	BindGadgetEvent(1,@Button())
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
 EndIf
  
 

viele Grüße,
SBond

Re: Programmabsturz durch Benutzereingabe erzeugen

Verfasst: 26.05.2014 22:14
von RSBasic
Du willst einen Programmabsturz simulieren?
Z.B.: a/0

Re: Programmabsturz durch Benutzereingabe erzeugen

Verfasst: 26.05.2014 22:19
von SBond
danke dir :)


Hatte es probehalber mit Poke-Befehlen gelöst, aber manchmal will es nicht abstürzen:

Code: Alles auswählen

Procedure Button()
	*Puffer = AllocateMemory(15)
	PokeS(*Puffer, GetGadgetText(0))
EndProcedure

Aber Division durch Null ist auch ein guter klassiker ;)

Re: Programmabsturz durch Benutzereingabe erzeugen

Verfasst: 26.05.2014 22:20
von RSBasic
Wenn du einen ErrorHandler hast, kannst du auch RaiseError() benutzen.

Re: Programmabsturz durch Benutzereingabe erzeugen

Verfasst: 26.05.2014 22:22
von SBond
sehr gut

danke dir ;)

Re: Programmabsturz durch Benutzereingabe erzeugen

Verfasst: 26.05.2014 22:33
von RSBasic
Oder mit WinAPI mit einer Meldung: http://www.rsbasic.de/aktualisierung/wi ... %BCrzen.pb
Oder:

Code: Alles auswählen

Procedure KillMe()
  Protected hProcess
  
  hProcess = OpenProcess_(#PROCESS_TERMINATE, #False, GetCurrentProcessId_())
  TerminateProcess_(hProcess, 1)
  
EndProcedure
Einfach diese Prozedur aufrufen, um das eigene Programm abzuschießen.