Seite 1 von 3

Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 04.07.2019 09:19
von Josh
Ich verwende gerne Disabledebugger/Enabledebugger innerhalb von Macros, damit das Debuggen flüssiger geht:

Code: Alles auswählen

Macro MyMacro
  DisableDebugger
  a=1
  b=2
  EnableDebugger
  c=3
EndMacro

CallDebugger

MyMacro
Debug b
Andererseits setze ich auch ganze Includefiles innerhalb von DisableDebugger/EnableDebugger, weil da nur Prozeduren enthalten sind, die so ausgelutscht sind, dass ich da nicht durchdebuggen will.

Wenn ich allerdings innerhalb dieser Prozeduren einen meiner Macros wie oben verwende, zerstört mir das EnableDebugger aus dem Macro mein System. Hat jemand eine Idee, ob ich irgendwie abfragen kann, ob DisableDebugger momentan aktiviert ist?

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 04.07.2019 09:46
von #NULL
Ich habe das auch schonmal im englischen Forum gefragt, leider ohne Erfolg. Ich glaube das ist momentan einfach nicht möglich.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 04.07.2019 09:54
von RSBasic
Irgendwo im Forum habe ich mal einen Asm-Code gesehen, mit dem man ermitteln kann, ob der Code mit oder ohne Debugger ausgeführt wird, weil der Asm-Code etwas anders ist, wenn man mit dem Debugger startet.
Vielleicht kann man auf diese Weise ermitteln, ob DisableDebugger oder EnableDebugger zuletzt benutzt wurde?

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 04.07.2019 10:09
von RSBasic
Ich habe eine Idee, wie man abfragen könnte, ob zuletzt DisableDebugger oder EnableDebugger benutzt wurde.
Da "Debug" innerhalb DisableDebugger nicht ausgeführt wird, könnte man eine globale Variable erstellen, die von einer Prozedur auf 1 gesetzt wird:

Code: Alles auswählen

Global IsDebugger

Procedure IsDebugger()
  IsDebugger = 1
EndProcedure

DisableDebugger;Wenn du DisableDebugger entfernt, dann wird die Prozedur aufgerufen und die globale Variable auf 1 gesetzt.
Debug IsDebugger()
EnableDebugger

Debug IsDebugger

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 04.07.2019 10:18
von #NULL
:mrgreen: Genial.
Aber leider nützt das vermutlich nichts, man müsste es zur Compilezeit abfragen können.

Code: Alles auswählen

If 0
  DisableDebugger
EndIf

Debug "d"
Ein runtime test wie etwa If 0 um den Debugger zu steuern funktioniert nicht. Der Debugger wird in jedem Fall danach disabled sein.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 04.07.2019 20:59
von Sicro
@RSBasic: Gute Idee! Hier eine Macro-Version:

Code: Alles auswählen

Macro GetDebuggerState(_state_)
  PokeI(@_state_, #False)
  Debug PokeI(@_state_, #True)
EndMacro

Define state

EnableDebugger
GetDebuggerState(state)
MessageRequester("EnableDebugger", Str(state))

DisableDebugger
GetDebuggerState(state)
MessageRequester("DisableDebugger", Str(state))

EnableDebugger
GetDebuggerState(state)
MessageRequester("EnableDebugger", Str(state))
Die "leeren" Debugs könnten bei vielen Statusprüfungen aber schnell stören…

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 11:39
von juergenkulow
Hallo Team Fred,

ich hätte da eine Kleinigkeit für die Wunschliste, eine Compiler-Variable:

Code: Alles auswählen

CompilerIf #PB_Compiler_IsDebuggerEnable
Vielen Dank - schon mal.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 11:45
von RSBasic
@juergenkulow
Deine CompilerIf-Abfrage bezieht sich ja auf EnableDebugger und DisableDebugger oder?
Am besten erstellst du einen Thread im englischen Forum oder du schreibst "+1" in diesem Thread.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 12:02
von NicTheQuick
Eine globale Variable funktioniert natürlich nicht zur Compilezeit. Außerdem werden die ersten Probleme auftreten, sobald man Threads benutzt.

Wie wäre es mit etwas Macro-Magie?

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
Debug DebuggerEnabled
DebuggerOff
Debug DebuggerEnabled
Ich ändere hier jedes mal den Inhalt des Macros "DebuggerEnabled", je nachdem, ob man ihn aus- oder angeschaltet hat. Das Macro kann man dann wie eine Variable verwenden. Ob das alles auch mit CompilerIf zusammenarbeitet, hab ich noch nicht getestet.

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Verfasst: 05.07.2019 12:08
von #NULL
@jürgenkulow
Das reicht aber meiner Meinung nach alles nicht aus. Es geht darum nach einem enable/disable Block den vorherigen Zustand wiederherzustellen. Dazu müsste man ihn auch zur Compilezeit zwischenspeichern können. Man könnte dazu über ein CompilerIf Konstanten definieren, aber da es kein undefine gibt, schon gar nicht für Konstanten, bräuchte man bei jeder Abrage eine neue Konstante. Das ganze wird also nicht sonderlich gut funktionieren.

Module helfen ein wenig, da sie den Debugger state bereits kapseln.

Code: Alles auswählen

Debug "a"
DisableDebugger
Debug "(b)


DeclareModule m
EndDeclareModule

Module m
  Debug "m 1"        ; enabled in module per default
  DisableDebugger
  Debug "(m 2)"
  EnableDebugger
  Debug "m 3"
EndModule

Debug "(c)"          ; still disabled from very first disable