DisableDebugger

Für allgemeine Fragen zur Programmierung mit PureBasic.
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

DisableDebugger

Beitrag von Toshy »

Guten Morgen.

Auch wenn ich beim Programmieren immer den Debugger mitlaufen lasse, so habe ich dessen FUnktionen kaum genutzt. Der Debugger verlangsamt das Programm angeblich um einen Faktor 6. Bei einem neuen Kurzprogramm (recht viele LinkedListvergleich in Schleifen) dauert die Ausführung mit Debugger ca. 155 Sekunden, OHNE dauert sie gerade mal 8 Sekunden, ist also noch etwas schneller ohne Debugger.
Da die Berechnungen noch intensiver werten, läßt sich mit Debugger kaum noch arbeiten wenn ich bei jeder Ausführung Minuten bzw. bald ne halbe Stunde warten muß.

Dazu gibt es wohl
DisableDebugger
aber wie funktioniert dieser Befehler bzw. wie wird er deaktiviert?
Ich dachte bisher nur EnableDebugger aktieviert ihn wieder und was zwischen beiden steht läuft so, als sei es ohne Debugger gestartet. Was dann für mich auch bedeutet, daß z.B. auch "debug Texte" NICHT ausgegeben werden.
Bei mir aber läuft das Programm dann trotzdem so schneckenlangsam und die Debugtexte werden auch ausgegeben.
Was mache ich falsch?

Oder läuft das in der neuen PB 4.20 Version noch fehlerhaft?

Gruß
Toshy

[edit]
Nachtrag:
Vielleicht habe ich es nun selbst rausgefunden. Die Befehle sind ja Compilerbefehle die wohl wärend des Kompelierens den Kompiler anweisen hier und da dies und das zu machen.
Das heißt dann wohl "leider" das man das "Disable" NICHt vor einem Procedureaufruf schreiben kann damit diese schnell ausgeführt wird, sondern direkt in die Procedure bzw. im Code davor einfügen muß.
Ist jetzt für mich auch recht logisch wenn ich darüber nachdenke.

Ich wollte diesen Beitrag daher eigentlich löschen, aber ich denke, daß wird dem einen oder anderen auch mal so gegangen sein. Daher wäre es sicher gut, wenn man in die Hilfedatei einen Kurzen Absatzt schreibt der dies etwas besser erklärt.
1. Win10
PB6.1
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

interessanter Punkt, ist mir auch neu.

noch etwas:
der Debugger in der IDE kann auch direkt mit einem klick auf den Käfer-Button in der Werkzeugleiste ausgeschaltet werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

EnableDebugger / DisableDebugger: habe ich bisher noch nie benötigt. Ich
benutze jaPBe und drücke F6, wenn ich meinen Code mit Debugger starten
will; ansonsten F5.

Zu Deinem Problem: Nachfolgender Code gibt bei mir lediglich 1 und 3 aus.
Scheint also zu funktionieren

Code: Alles auswählen

Debug "1"
DisableDebugger
Debug "2"
EnableDebugger
Debug "3"
Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Kiffi

sein Problem ist aber folgendes:

Code: Alles auswählen

Procedure test()
  Debug "2"
EndProcedure

Debug "1"
DisableDebugger
test()
EnableDebugger
Debug "3"
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kaeru Gaman hat geschrieben:sein Problem ist aber folgendes: [...]
oh ja, stibimmt. Wer lesen kann, ist klar im Vorteil. :oops:

Grüße ... Kiffi
a²+b²=mc²
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 »

Kaeru Gaman hat geschrieben:@Kiffi

sein Problem ist aber folgendes:

Code: Alles auswählen

Procedure test()
  Debug "2"
EndProcedure

Debug "1"
DisableDebugger
test()
EnableDebugger
Debug "3"

Code: Alles auswählen

Procedure test()
  DisableDebugger
  Debug "2"
  EnableDebugger
EndProcedure

Debug "1"

test()
EnableDebugger
Debug "3"
So ist es richtig, der Debugger sieht nicht den Source, der arbeitet
anders. Jeder Scope ist extra zu behandeln, wichtig vor allem für Threads.
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
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

ts-soft hat geschrieben:So ist es richtig, der Debugger sieht nicht den Source, der arbeitet
anders. Jeder Scope ist extra zu behandeln, wichtig vor allem für Threads.
Mit Scope hat das nichts zu tun. Enable/DisableDebugger ist ein Keyword wie CompilerIf, oder EnableExplicit. Es bestimmt wie die darauf folgenden Codezeilen compiliert werden, egal ob da Prozeduren drin sind oder nicht. Es betrifft also alle Debug statements (wichtiger noch: die runtime-Checks) die zwischen einem DisableDebugger und EnableDebugger im Code stehen, nicht die dazwischen ausgeführt werden. (wie man ja an den Beispielen sieht)
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 »

ahja, danke Freak, also so:

Code: Alles auswählen

DisableDebugger
Procedure test()
  Debug "2"
EndProcedure
EnableDebugger
Debug "1"
test()
Debug "3"
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
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

@Kaeru Gaman und Kiffi:
Die beiden Befehle muß man nutzen wenn man den Debugger nutzen will, aber NICHT für DEN GESAMTEN Code. Ich muß den Debugger nutzen, aber ich durchlaufe z.B. im Code schleifen die mindestensd 25 000 hoch 25 000 mal durchlaufen. Mit Debugger kann man da ein Mittagsschläfchen machen. FÜR DIESEN CODEteil muß dann das debuggen ausgeschaltet werden was nur VOR dem kompelieren geschehen kann. Denn soweit ich das vermute ist es nicht so, daß der Debugger den wir sehen ein zweites PRotgramm ist welches unser eigenes Programm wärend der Ausführung überwacht, sondern der Debugger wärend des kompelierens zusätzlich Code in "unseren Code" einfügt. Für jede Zeile (jede Befehle / Funktion) von uns werden wohl mehrere weitere Zeilen MITKOMPILIERT.

Kaeru Gaman, du hast "mein Problem" richtig er kannt.
Es ist jetzt wo ich es selbst erkannt habe ja keines mehr. Auch wenn ich jetzt beim Debuggen ein wenig anders vorgehen muß. Aber wer das nicht weiß oder von sich aus versteht steht da ohne kurze Erklärung "für Dumme" ;-) in der Hilfedatei vor ner bunten Wand und denkt "was hab ich denn heute geKIFFIt" ;-)

@ts-soft:
Yip. Hatte mir das als ich den Beitrag eröffnete nicht durch den Kopf gehen lassen, war aber Minuten später klar. Hatte es also schon selbst gleich richtig hinbekommen. Aber es sollte vielleicht kurz mit in die Hilfe aufgenommen werden. Sollte aber jemand der Englisch beherrscht weiterleiten.
Ob Disable nun in der Procedure steht oder außerhalb ist egal, aber da wo es im Code steht wird der Befehl genutzt. Proceduren hin oder her ;-)
Jemand der sich keine Gedanken darüber macht wie der Debugger funktioniert kommt da vielelicht nicht drauf und versucht es wie in deinem Beispiel oder wie ich zuerst und wundert sich warum es nicht klappt wie gewünscht.

Daher mein Vorschlag das erklärend mit in die Hilfedatei aufzunehmen.

Zwar werden diese Befehle selten genutzt wie ich vermute, aber bei rechenintensivem Code / vielen Schleifendurchläufen kommt man nicht darum herum.
1. Win10
PB6.1
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Toshy hat geschrieben:...aber ich durchlaufe z.B. im Code schleifen die mindestensd 25 000 hoch 25 000 mal durchlaufen [werden]...
hihi, muss einfach sein, aber was bitte machst du da? Die Zahl ist so unfassbar groß, ich nenne die jetzt einfach mal unendlich :lol:
Antworten