Seite 2 von 3

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 12:11
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?

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 12:45
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"

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 13:10
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"

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 13:26
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

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 13:36
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.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 15:10
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ß.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 15:54
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.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 19:11
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...

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 06.07.2019 09:27
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

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 06.07.2019 09:43
von Nino
NicTheQuick hat geschrieben:Geht das denn?
Das ist genial. :D :allright: