Abfrage ob EnableDebugger/DisableDebugger aktiviert

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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?
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag von #NULL »

Ich habe das auch schonmal im englischen Forum gefragt, leider ohne Erfolg. Ich glaube das ist momentan einfach nicht möglich.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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…
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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.
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: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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.
Bild
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Abfrage ob EnableDebugger/DisableDebugger aktiviert

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten