Seite 1 von 3

Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 19:07
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.

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 19:12
von ts-soft
Debugger - Variablenliste

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 19:17
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... :)

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 19:42
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

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 19:54
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.

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 20:00
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.

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 20:35
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... :)

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 20:42
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.

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 20:46
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:

Re: Unterbrechungsmodus Variablenwerte komfortabel ablesen?

Verfasst: 07.03.2011 21:27
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...