Abfrage ob EnableDebugger/DisableDebugger aktiviert

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von RSBasic »

@Sicro
:allright:

@NicTheQuick
:allright:
NicTheQuick hat geschrieben:Das Macro kann man dann wie eine Variable verwenden.
Ich habe dein Code mit dem Code von #NULL getestet, aber scheint nicht zu funktionieren oder?

Code: Alles auswählen

Macro __MacroColon__
   :
EndMacro

Macro __JoinMacroParts__(P1, P2=, P3=, P4=, P5=, P6=, P7=, P8=)
   P1#P2#P3#P4#P5#P6#P7#P8
EndMacro

Macro __CreateMacro__(name,name2,macroBody)
   __JoinMacroParts__(Macro name, name2, __MacroColon__, macroBody, __MacroColon__, EndMacro)
EndMacro

Macro DebuggerEnabled
   0
EndMacro

Macro DebuggerOn
   EnableDebugger
   UndefineMacro __JoinMacroParts__(Debugger, Enabled)
   __CreateMacro__(Debugger, Enabled, 1)
EndMacro

Macro DebuggerOff
   UndefineMacro __JoinMacroParts__(Debugger, Enabled)
   __CreateMacro__(Debugger, Enabled, 0)
   DisableDebugger
EndMacro

DebuggerOn

If DebuggerEnabled = 1
  DebuggerOff
EndIf

Debug "d"

Er müsste eigentlich "d" nicht ausgeben, weil DebuggerEnabled in dem Fall true ist. Oder ist das nicht möglich?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von NicTheQuick »

In der Tat sehr merkwürdig. Das "hm3" und "hm4" ist nicht mehr da, dafür aber das "hm5" am Ende. Das ergibt alles keinen Sinn. Bestimmt ist das wieder zu viel für den armen PB-Compiler, wenn man so mit Macros umgeht. :lol:

Code: Alles auswählen

Macro __MacroColon__
	:
EndMacro

Macro __JoinMacroParts__(P1, P2=, P3=, P4=, P5=, P6=, P7=, P8=)
	P1#P2#P3#P4#P5#P6#P7#P8
EndMacro

Macro __CreateMacro__(name,name2,macroBody)
	__JoinMacroParts__(Macro name, name2, __MacroColon__, macroBody, __MacroColon__, EndMacro)
EndMacro

Macro DebuggerEnabled
	0
EndMacro

Macro DebuggerOn
	EnableDebugger
	UndefineMacro __JoinMacroParts__(Debugger, Enabled)
	__CreateMacro__(Debugger, Enabled, 1)
EndMacro

Macro DebuggerOff
	Debug "hm1" + DebuggerEnabled
	UndefineMacro __JoinMacroParts__(Debugger, Enabled)
	Debug "hm2" + DebuggerEnabled
	__CreateMacro__(Debugger, Enabled, 0)
	Debug "hm3" + DebuggerEnabled
	DisableDebugger
	Debug "hm4" + DebuggerEnabled
EndMacro

DebuggerOn

If DebuggerEnabled = 1
	Debug "hm0"
	DebuggerOff
	Debug "hm5"
EndIf

Debug "d"
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von #NULL »

Nested Macros werden ja nicht wirklich unterstützt. Ich denke es passiert folgendes: Im body von Macro DebuggerOff wird bei CreateMacro ein nested macro body erzeugt, und dessen EndMacro verlässt den Macro-Body-Scope, so dass das DisableDebugger im Body von DebuggerOff den State direct verändert. So ganz sicher bin ich mir aber auch nicht. Ich verstehe auch folgendes nicht ("d" wird nicht ausgegeben):

Code: Alles auswählen

EnableDebugger

Debug "a"

Macro concat(a, b)
  a#b
EndMacro

Macro enable
  concat(Mac,ro) isEnabled
  concat(EndMac,ro)
  EnableDebugger
EndMacro

Macro disable
  UndefineMacro isEnabled
  DisableDebugger
EndMacro

Debug "b"

disable

Debug "c"

enable

Debug "d"
my pb stuff..
Bild..jedenfalls war das mal so.
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

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von NicTheQuick »

Hab grad nicht so viel Zeit, aber vielleicht kann man hiermit was anfangen:

Code: Alles auswählen

Macro debugOn
	MacroExpandedCount
EndMacro

Macro debugOff
	MacroExpandedCount
EndMacro

Macro DebuggerOn
	CompilerIf debugOn
		Debug "on: " + Str(debugOn - debugOff)
	CompilerEndIf
EndMacro

Macro DebuggerOff
	CompilerIf debugOff
		Debug "on: " + Str(debugOn - debugOff)
	CompilerEndIf
EndMacro

DebuggerOn
DebuggerOn
DebuggerOn
DebuggerOff
DebuggerOn
DebuggerOff
DebuggerOff
DebuggerOff
DebuggerOff
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von #NULL »

#NULL hat geschrieben:Ich verstehe auch folgendes nicht...
Mit --preprocess sehe ich, dass enable einfach nur zu

Code: Alles auswählen

Macro isEnabled
EndMacro
aufgerlöst wird, also bis zum enthaltenen EndMacro. Das EnableDebugger danach wird einfach weggelassen.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von Josh »

Ich habe das ganze mal in 'Feature Requests and Wishlists' gepostet.

Naja, hätte meinen Wunsch auch einen Frosch auf den Bauch tätowieren können. Die Chance dass was passiert, wäre in diesem Fall wohl gleich groß.
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

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von NicTheQuick »

Geht das denn?

Code: Alles auswählen

Macro debugOn
	MacroExpandedCount
EndMacro

Macro debugOff
	MacroExpandedCount
EndMacro

Macro DebuggerOn
	CompilerIf debugOn And debugOn - debugOff = 0
		EnableDebugger
		Debug "EnableDebugger"
	CompilerEndIf
EndMacro

Macro DebuggerOff
	CompilerIf debugOff And debugOn - debugOff = -1
		Debug "DisableDebugger"
		DisableDebugger
	CompilerEndIf
EndMacro

Debug 1
DebuggerOff
Debug 2
DebuggerOff
Debug 3
DebuggerOn
Debug 4
DebuggerOff
Debug 5
DebuggerOn
Debug 6
DebuggerOn
Debug 7
Wenn man es auch noch in Modulen nutzen möchte, muss man die Macros in ein Modul auslagern, das man dann überall includieren muss.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von Sommertv »

Schönen Abend,
dazu hätte ich eine Frage:
arbeitet der Purebasic Debugger als eigennständiger Debugger?
Ich denk jetzt gerade an meine Assembler Zeiten und an SoftIce...
Da konnte man über die Prefetch Queue heraus bekommen, ob der Debugger aktiv war.
Wenns jemand interessiert, vielleicht find ich noch irgendwo den Code, dann kann ich ihn hier posten...
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von Josh »

Sommertv hat geschrieben:arbeitet der Purebasic Debugger als eigennständiger Debugger?
Hi Sommertv,
Es geht nicht um den eigenständigen oder eingebauten Debugger. Ob ein Debugger in den Compileroptionen aktiviert ist, kann man ja mit #PB_Compiler_Debugger abfragen.

Es geht um EnableDebugger/DisableDebugger, mit diesen beiden Befehlen kann man den Debugger (falls in den Compileroptionen aktiviert) im Code ausschalten bzw. wieder einschalten. Das hat allerdings keinen Einfluß auf #PB_Compiler_Debugger, weil in diesem Fall der Debugger nur 'ein bisschen' deaktiviert wird. Ich glaube mit diesen beiden Befehlen wird nur die Debugausgabe sowie die Zeilenstopps deaktiviert, während intern der Debugger weiter läuft. Oder so ähnlich halt :D
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von Nino »

NicTheQuick hat geschrieben:Geht das denn?
Das ist genial. :D :allright:
Antworten