Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Anfängerfragen zum Programmieren mit PureBasic.
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von SebastianJu2 »

Gibt es einen Weg die Werte von Variablen komfortabel abzulesen während man im Unterbrechungsmodus ist? Es geht meistens wenn man mit der Maus über der Variable steht aber das ist mühsam und dauert.
Ich kenne das von VBA, da gab es ein Fenster in dem man Variablen oder Ausdrücke definieren konnte und während der Code unterbrochen war für die Fehlersuche konnte man immer genau sehen welche Werte die Variablen gerade enthielten.
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

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von ts-soft »

Debugger - Variablenliste
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
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von SebastianJu2 »

Danke... das hatte ich übersehen.
Schade dass er scheinbar nicht auf Strukturdaten zugreifen kann. *c\c kann er zB wohl nicht. Aber trotzdem wird das schon helfen... :)
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

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von ts-soft »

SebastianJu2 hat geschrieben:Schade dass er scheinbar nicht auf Strukturdaten zugreifen kann. *c\c kann er zB wohl nicht. Aber trotzdem wird das schon helfen... :)
Es kann problemlos auf Strukturierte Variablen zugreifen.
Pointer sind keine Variablen. Selbst Schuld wenn Du die für alles nutzt :mrgreen:
Dann sollte Dir aber die Memory-Anzeige auch genügen.
PS: wäre reiner Maschinencode für Dich auch eine Alternative? :mrgreen:

Gruß
Thomas
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
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von SebastianJu2 »

Assembler schau ich mir irgendwann mal an. :) Pointer sind schwer genug erstmal. Ein Fehler und man kann ganz schön suchen. Und wenn ich mir überlege dass Assembler noch kryptischer ist... lass ich davon vermutlich eine Weile die Finger.
Die Speicheranzeige sieht interessant aus.
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

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von ts-soft »

Maschinencode <> Assembler

Maschinencode ist das, was der Assembler erzeugt, also Assembler ist in diesem Falle die
Hochsprache :lol:

Strukturierte Variablen werden intern immer als Pointer übergeben, macht also nur Sinn,
wenn man diesen strukturierten Variablen einen Pointer übergibts, damit dieser strukturiert
ist. In reinem Basic würde man hierfür CopyMemory nehmen.

PS: die ganzen Peeks und Pokes, sowie Memorybefehle solltest Du aus den FF kennen,
bevor Du sinnlose Anti-Beschleunigungen mit Pointer versuchst.
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
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von SebastianJu2 »

Warum stört dich das eigentlich so? Ich übe doch nur.

Wie ich die Daten einlese hatte ich ja schon gepostet und jetzt ging es darum die Daten auch wieder raus zu bekommen. Denn das Ganze soll die Zeilen einlesen und dann zB sortieren auf irgendeine Art. Ich dachte da an URLs die ohne Beachtung von http und ww
, subdomains und Pfaden sortiert werden sollten. Also Liste auslesen, bearbeiten und wieder anzeigen.
Ich habe dann erstmal versucht die Liste wieder auszugeben in ein listicongadget. Die Liste bestand aus 230.000 URLs. Das einlesen in die Liste dauerte nur ein paar ms. Ist ja auch kein Wunder da ja nur Pointer gesetzt wurden.
Dann wollte ich normal ausgeben in das listicongadget und das dauerte vielleicht fast eine Minute. Dann hab ich ein 2. editorfeld genommen und mit addgadgetitem gefüllt. das dauerte noch länger da offenbar jedesmal alles neu gefüllt werden musste. Es wurde also während dem Füllen immer langsamer pro Zeile. Da war das listicon schon besser.
Dann versuchte ich das editorgadget auf einmal zu füllen. Also eine Stringvariable genommen und jedes Listenelement addiert. Und das dauerte ebenfalls ewig. Vermutlich weil jedes mal neuer Ram bereitgestellt werden musste.
Und jetzt will ich mal sehen was es ausmacht wenn ich das gleiche mit allocatememory mache, die listeneelemente durchgehe und in den neuen speicher verschiebe. Der Platz dafür ist ja schon am Anfang bereitgestellt. Vielleicht geht das schneller.
Ist alles Experiment... :)
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von SebastianJu2 »

Das Resultat ist da... es dauert ms das Ganze wieder in einen großen String zu verwandeln mit Zeilenumbrüchen und es in das nächste Editorgadget zu schreiben. Praktisch genauso schnell wie einlesen.
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

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von ts-soft »

SebastianJu2 hat geschrieben:Warum stört dich das eigentlich so? Ich übe doch nur.
Aber in der falschen Reihenfolge!
Erstmal solltest Du diese Dinge auch in BASIC erledigen können, also mit Peek und Poke,
CopyMemory, MoveMemory usw. bevor Du es mit Pointern erledigst. Dir fehlt einfach
noch das Verständnis dafür, wann Pointer überhaupt nur einen Sinn machen.

Dein Verständis für Strukturen ist auch noch zu eingeschränkt. Zeig mir mal bitte eine
einfache Procedure, der ich einen String ByRef übergebe.

Und solange Du nicht erkennst, wo Pointer etwas bescheunigen könnten, solltest
Du diese meiden wie die Pest, weil die machen den Code schwer lesbar und entsprechen
nicht den Richtlinien der strukturierten Programmierung. Pointer sind eine schöne Sache,
in einigen seltenen Fällen, wenn man genau weiss, was man macht und das lernste nicht
durch Üben.

PS: Zu Deinem sinnlosen EditorGadget Beispiel:
EditorGadget unterstützt GetGadgetItemText(), lässt sich also ohne Umwege, Zeile für
Zeile in eine List übertragen, und das schneller als mit Pointern :mrgreen:
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
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Beitrag von SebastianJu2 »

Erstmal solltest Du diese Dinge auch in BASIC erledigen können, also mit Peek und Poke,
CopyMemory, MoveMemory usw. bevor Du es mit Pointern erledigst. Dir fehlt einfach
noch das Verständnis dafür, wann Pointer überhaupt nur einen Sinn machen.
Mit Peek und Poke? Aber das sind doch gerade Befehle die Pointer als Argumente brauchen.
Dein Verständis für Strukturen ist auch noch zu eingeschränkt. Zeig mir mal bitte eine
einfache Procedure, der ich einen String ByRef übergebe.

Code: Alles auswählen

Procedure.s test(*string.String)
  Debug PeekS(*string)
  ProcedureReturn "Proc fertig"
EndProcedure

string2.s = "Hallo"
Debug test(@string2)
Allerdings wollte ich eigentlich Debug *string\s benutzen. Funktioniert aber nicht. Ein String in einer Struktur wird als Pointer gespeichert damit die Struktur immer die gleiche Größe hat wenn ich mich richtig erinnere. Aber s.s in der Struktur ist doch eine normale Variable die dann ihren Inhalt freiwillig rausgeben sollte. Der Pointer *string ist doch nur der Pointer auf die Struktur und damit den Pointer des Strings. Ich weiß es nicht...
EditorGadget unterstützt GetGadgetItemText(), lässt sich also ohne Umwege, Zeile für
Zeile in eine List übertragen, und das schneller als mit Pointern :mrgreen:
Es müssen aber alle Daten zusammen sein weil man mit ihnen arbeiten muss (sortieren usw) und dann erst wieder dem User zur Verfügung stellt. Und ob das wirklich schneller wäre als wie es jetzt ist wage ich zu bezweifeln. Ich teste es jetzt aber...
Antworten