[PB 4.20] Mit Debugger=Error -- Ohne Debugger fehlerfrei O_o

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

[PB 4.20] Mit Debugger=Error -- Ohne Debugger fehlerfrei O_o

Beitrag von wolle212 »

Moin,

für dieses Beispiel müsst ihr noch ein Bild laden. Die Prozeduren sind für ein anderes Projekt gedacht, und sollen später mal dafür sorgen, dass ein Bild gezoomt dargestellt werden kann, ohne dies durch ein ständiges "On-the-Fly"-Größenverändern zu machen; sondern es soll ein Bild nur einmal in der Größe verändert, dann auf ein screengroßes Image gerendert, und dieses Image soll dann immer angezeigt werden. (Dieses kann man dann bspw. auch scrollen; weil Scrollen mit On-the-Fly-Resize ist zäh :) )
Erst wenn eine Änderung im Anzeig-Modus kommt, wird das Anzeigebild neu gerendert ... ist natürlich noch nicht fertig und erst ein Flag ist möglich ...

... womit wir beim Thema wären: Eigentlich bin ich der Meinung, dass der Code richtig ist, jedoch spuckt mir der Debugger ein ominöses
[ERROR] The specified output is NULL (0 value)
bei StartDrawin(ScreenOutput()) aus. Jedoch erst beim Zweiten Schleifendurchlauf. Was mich aber am meisten irritiert: Ohne Debugger läuft das Programm ohne Abbruch. Nur ohne Debugger zu coden ist ... suboptimal :(

BTW: Vorher hatte ich die 4.20 Beta2 -- da brach er mit dem internen Debugger bei gleicher Fehlermeldung ab; der externe hatte da keine Probleme. Deswegen habe ich PB geupdatet -- nun funzt es mit keinem Debugger mehr ...

Könnt ihr das Verhalten bei euch reproduzieren? Mach ich was mit dem Wechsel von ImageOutput() zu ScreenOutput() falsch? Liegt es am PB-Debugger? Fragen über Fragen ...

hat jemand eine Antwort?

TIA!

Code: Alles auswählen

;Sry für das Denglisch :)
Global height
Global width

;Auflösung des Screens
height =960
width  =1280

InitSprite()
InitKeyboard()
UseJPEGImageDecoder()
OpenScreen(width,height,32,"DrawImage")

Global bild
bild=LoadImage(#PB_Any,"01.jpg")



Enumeration 
	#FitWidth
	#FitHeight
	#Centered
	
	#PrePaint
EndEnumeration

Procedure PreDrawImage(ImageID,flag=#FitWidth)
	Debug "PreDrawImage() called"
	CreateImage(#PrePaint,width,height)
	
	Select flag
		Case #FitWidth
			Debug "Mode FitWidth"
			Debug ImageWidth(bild)
			Debug ImageHeight(bild)
			b.d	= ImageWidth(bild)
			h.d	= ImageHeight(bild)
			ratio.d = b/h		
			Debug "This should Not be null"
			Debug "ratio="
			Debug ratio
			If ratio=0
				Debug "Damn"
			EndIf	
			p_height.d 	=width/ratio
			p_height=Round(p_height,0)
			p_width.d	=width
			x			=0
			y			=0			
	EndSelect
	
	StartDrawing(ImageOutput(#PrePaint))
		Debug "Pwidth and pheiht"
		Debug p_width
		Debug p_height
		If IsImage(bild)
			DrawImage(ImageID(Bild),x,y,p_width,p_height)
		Else
			Debug "damn"
			End
		EndIf		
	StopDrawing()
	
	StartDrawing(ScreenOutput())
		DrawImage(ImageID(#PrePaint),0,0)
	StopDrawing()
	FlipBuffers()	
	
	Debug "PreDrawImage() exit"
EndProcedure


Procedure DrawImageOnScreen(ImageID,Mode)
	Debug "Prozdur DrawImage called"
	
	If IsImage(#PrePaint)=#False
		Debug "Prepaint is no Image"
		PreDrawImage(ImageID,Mode)
		Debug "Call DrawImageOnScreen"
		DrawImageOnScreen(ImageID(#PrePaint),Mode)
	Else
		Debug "Prepaint is a Image"
		Debug "Try to draw"
		ClearScreen(RGB(255,0,0))	
		StartDrawing(ScreenOutput())
			DrawImage(ImageID(#PrePaint),0,0)
		StopDrawing()
		FlipBuffers()
	EndIf	
EndProcedure

i=0
Repeat
	PreDrawImage(bild,#FitWidth)
	ClearScreen(RGB(0,0,0))
	Debug "ScreenOutput"
	ExamineKeyboard()
	Delay(10)
	Debug "Durchlauf #"+Str(i)
	i+1
Until KeyboardPushed(#PB_Key_Escape)
Edit: Kleiner Inhaltsfehler, typpo.
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Das liegt an deiner Debug-Orgie, entferne die Aufrufe und es funktioniert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Keine Probleme mit irgendeinem Debugger oder ohne. Vielleicht mal
EnableExplicit nutzen! (ohne ist jeder Source wertlos)
Testen ob das Bild geladen wird usw.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

OK

Beitrag von wolle212 »

das drollige ist ja, dass diese Debug-Orgie eben aufgrund des Fehlers erst da hineingekommen ist :lol: -- wie gesagt, noch unter der Beta ...

Gleich mal testen ...
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Dann würde ich schnellstmöglich auf 4.20 Final umzusteigen und den Code nochmal testen.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Hmmm

Beitrag von wolle212 »

Das Updaten habe ich bereits gemacht, da funktionierte es bei mir mit keinem Debugger mehr. Daher mein Post.

Bei mir gibt es aber auch wenn ich alle Debugaufrufe entferne immer noch das gleiche Problem bei eingeschaltetem Debugger ... wo liegt da nur der Fehler ...

Hmm, ich werde das mal auf einem anderem PC testen, nicht das mein System irgendwie kaputt ist, weil hier ja schon die Meldung kam, der Code würde funzen, egal ob der Debugger ein- oder ausgeschaltet ist, mal schauen.

@TS-Soft:
EnableExplicit? Ist das nicht eher dafür gedacht, wenn man plattformübergreifend programmieren will?
Ich sehe grad nicht den Nutzen für mein jetziges Problem ... OK -- grade unter der Hilfe nochmals den Eintrag gelesen -- es ist vielleicht doch nicht so dumm, darauf zu setzen, aber erst mal will ich den Debug-Bug loswerden :)
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Versuch mal eine komplette Neuinstallation von PB. Also nix mit Update sondern Ordner plattmachen und 4.20 frisch installieren. und vergiss EnableExplicit, das ist hier irrelevant denn es geht bei mir ohne Debugs. Es wird wahrscheinlich auch sogar mit Debugs auf meinem Rechner zuhause gehen. Der Rechner auf dem ich das hier teste hat nur onboard Intel GraKa und ist halt zum Arbeiten gedacht und nicht zum "rumspielen".
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das EnableExplicit hat ts erwähnt, weil das eine ganz grundlegende
Verfahrensweise ist, Typos in Variablennamen zu eliminieren.
ohne dem können Variablen on-the-fly definiert werden, was dazu führt,
dass seltsamste fehler auftreten können wenn man irgendwo nen Namen vertippt.

und generell was das Updaten betrifft:
mit dem normaler Installer immer nur in jungfräuliche Verzeichnisse installieren,
denn das ist ein Installer kein Updater.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Ich glaube es ist gelöst

Beitrag von wolle212 »

Ich habe PB ganz runter gehauen, neu installiert -- auch den Ordner in %AppData% gelöscht -- immer noch das gleiche Problem. Um auszuschließen, dass es mein Rechner ist, habe ich eben PB auf einen anderen Rechner installiert; dort zeigen sich aber leider die gleichen Symptome. Bei eingeschaltetem Debugger gibt es einen Fehler, ohne Debugger läuft und läuft und läuft es ...

Und was das Vertippen angeht: Eine gute Methode, um die zu vermeiden, ist die Autovervollständigung, die ich exessiv nutze.

Ich bin nach wie vor ratlos, warum dieses Problem auftritt; auch wäre es toll wenn sich jemand meldet, bei dem der Debugger den Fehler ausspuckt! Ich will nicht alleine sein :)

EDIT:
ts-soft hat geschrieben: [...]
Testen ob das Bild geladen wird usw.
[...]
Das dürfte eigentlich nicht das Problem sein, der Fehler tritt ja bei StartDrawing(ScreenOutput()) auf ... da verschluckt er sich ...

EDIT2:
Vielversprechenden Post im englischen Forum gefunden:

EDIT3:
Ich glaube, ich weiß jetzt, was das Problem ist. Ich habe kein IsScreenActive() verwendet. Ich vermute, dass das Debugger-Fenster dafür sorgt, dass mein Screen inaktiv wird, wodurch man eben nicht drauf zeichnen darf.

Mit einer IsScreenActive()-Active-Abfrage bricht das Prog zwar nicht mehr ab, allerdings sehe ich während es läuft nur den Desktop ... AHA ... der Debugger minimiert das Programm und dort läuft es weiter, und da ist eben der Screen NICHT aktiv! Debugger-Fenster schließen und Programm wieder in den Vordergrund holen funzt!

Hier der Code:

Code: Alles auswählen

Global height
Global width

;Auflösung des Screens
height =960
width  =1280

InitSprite()
InitKeyboard()
UseJPEGImageDecoder()
OpenScreen(width,height,32,"DrawImage")

Global bild
bild=LoadImage(#PB_Any,"01.jpg")



Enumeration 
	#FitWidth
	#FitHeight
	#Centered
	
	#PrePaint
EndEnumeration

Procedure PreDrawImage(ImageID,flag=#FitWidth)
	CreateImage(#PrePaint,width,height)
	
	Select flag
		Case #FitWidth
			b.d	= ImageWidth(bild)
			h.d	= ImageHeight(bild)
			ratio.d = b/h		
			p_height.d 	=width/ratio
			p_height=Round(p_height,0)
			p_width.d	=width
			x			=0
			y			=0			
	EndSelect
	
	StartDrawing(ImageOutput(#PrePaint))
		Debug "Pwidth and pheiht"
		Debug p_width
		Debug p_height
		If IsImage(bild)
			DrawImage(ImageID(Bild),x,y,p_width,p_height)
		Else
			End
		EndIf		
	StopDrawing()
	
	If IsScreenActive()
	  ClearScreen(RGB(255,0,0))
	  StartDrawing(ScreenOutput())
		  DrawImage(ImageID(#PrePaint),0,0)
	  StopDrawing()	
	EndIf
	FlipBuffers()
EndProcedure


Procedure DrawImageOnScreen(ImageID,Mode)
	If IsImage(#PrePaint)=#False
		PreDrawImage(ImageID,Mode)
		DrawImageOnScreen(ImageID(#PrePaint),Mode)
	Else
		ClearScreen(RGB(255,0,0))	
		StartDrawing(ScreenOutput())
			DrawImage(ImageID(#PrePaint),0,0)
		StopDrawing()
		FlipBuffers()
	EndIf	
EndProcedure

i=0
Repeat
	PreDrawImage(bild,#FitWidth)
	ClearScreen(RGB(0,0,0))
	ExamineKeyboard()
	Delay(10)
	i+1
Until KeyboardPushed(#PB_Key_Escape)
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

EnableExplicit hab ich deshalb erwähnt, weil ich nicht bereit bin fehler in
codes zu suchen, die in keinster weise gegen fehler geschützt sind, tippfehler
suchen, weil der autor zu faul ist seine variablen zu deklarieren halte ich für
unzumutbar.

Da wir nicht im Anfängerforum sind, erwarte ich declarierte Variablen.

Für PB gibts 2 Versionen, einmal das Setup, welches nicht über eine
vorhandende Version installiert werden sollte, sowie ein Update, welches
dazu bestimmt ist.

Aber in Zukunft wirds wohl nur noch eine Version geben, die beides kann,
somit ist das jetzt auch nicht mehr so wichtig.

Bei mir funktioniert der Code auf jedemfall Fehlerfrei, so das der Fehler
eigentlich nur beim Pfad zum Bild oder das Bild selber ist defekt.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten