GDB mit Frontend benutzen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
fragender
Beiträge: 6
Registriert: Mo 25. Jun 2007, 15:34
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Dresden

GDB mit Frontend benutzen

Beitrag von fragender »

Hallo,

wie kann ich Debuggerinterne Kommandos von aussen übergeben. Ich will ein Debuggerfrontend bauen, einen Sourcelevel-Debugger. Als Debugger will ich GDB benutzen. Aber wie kriege ich die Debuggerausgaben geliefert, die ich in mein Windows-Fenster bringen will? Wnn ich GDB starte, erscheint ein GDB eigenes Fenster mit Prompt. Dort gebe ich die Debugger Kommandos. Mit --nw --batch bewirke ich, das der Debugger sofort wieder endet.
Wie übergebe ich in diesem Modus die Debuggerkommandos an den Debugger und wie erhalte ich die Ausgaben des Debuggers auf der Konsole unter Windows zuerst mal. Von dort aus kann ich über piping die Ausgaben abholen und in meinem Windows Fenster darstellen.

Aber ich muss erst mal Kommandos von außen an den Debugger übergeben können und zwar die Debug Kommandos (step, next, print...) und ich brauche die Debuggerausgaben wenigstens erst mal auf der Konsole. Wie also erreiche ich das? Dake schon mal im Voraus für Eure Hilfe

fragender

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wie übergebe ich in diesem Modus die Debuggerkommandos an den Debugger und wie erhalte ich die Ausgaben des Debuggers auf der Konsole unter Windows zuerst mal. Von dort aus kann ich über piping die Ausgaben abholen und in meinem Windows Fenster darstellen.
Wie jetzt ?
Na durchs piping kommst du an die Informationen und übergibst ihm welche. Hast du jetzt nur das Wort benutzt weil dus irgendwo gelesen hast ? Irgendwie ist deine Frage nicht schlüssig in sich.

Schau dir mal TProcess an.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ist doch alles da.
Schau dir mal im Lazarus Verzeichnis das Verzeichnis "debugger" an.
gdbmidebugger.pp ist das "Frontend" afaik, TProcess Sachen findest du in cmdlinedebugger.pp

fragender
Beiträge: 6
Registriert: Mo 25. Jun 2007, 15:34
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Dresden

GDB mit Frontend benutzen

Beitrag von fragender »

Hallo!

Danke erst mal für Eure Antworten.

@theo: Danke, GDBMIDebugger ist meine Klasse

aber ein Problem gibt es doch noch:

In der Klasse Debugger, der Basisklasse für alle Debugger sind die Methoden für
Schrittbetrieb und Evaluation als public definiert. Was ich aber nicht gefunden hab,
ist eine Methode oder Eigenschaft, die mir die aktuelle Quelltextzeile und die aktuelle
Quellcodedatei übergibt. Zusätzlich die Anweisung in der aktuellen Quelltextzeile kann
mir beim Prüfen helfen (Habe ich die richtige Quellcodezeile?) oder bei falsch
initialisierter Variable (NIL-Zeiger, Überschrittener Array Index...) könnte ich
einen Spaltencursor auf die betroffene Variable positionieren. In diesem Fall brauche
ich die Nummer der Spalte in der aktuellen Quellcodezeile.

Meine Frage:

Wie komme ich an die mich interessierenden Infos ran?
Welche Bedeutung hat die Eigenschaft LineEnds der Klasse TCmdLineDebugger?
Die Methoden Runto() und JumpTo() verlangen als Parameter die Quellcodedatei und
in dieser die Zeilennummer. Aber wo krieg ich die her?

Ich will mit next bzw. Step die nächste Quelltextzeile erhalten. Die soll in meinem
Quelltext dann angesprungen werden. Die Zeilennummer ist ja jeweils mit angegeben.
Mit einer Funktion Gehe zu Zeile <Nummer> könnte ich in meinem Debugger-Frontend so
in meinem Quelltext die aktuelle Zeile anspringen. Ich will also einen Quellcode-
Debugger bauen. Ihr kennt vielleicht DDD für Linux. Was vergleichbares gibt es für
Windows aber nicht, zumindest nicht als Open Source. Und die kostenlosen Microsoft
Debugger erlauben zwar Source Level Debugging von C/C++ und C#? Quelltexten aber kein
Pascal. Und für Pascal will ich den Source Level Debugger bauen, mit Windows Fenstern.

Aber zuerst brauche ich die relevanten Informationen aus der geeigneten Debuggerklasse.

Deshalb meine Frage.

Jetzt seh ich grad noch mal in den DebuggerQuelltexten nach und glaube das die Ausdrücke in TDBGWatch bzw in TDBGLocals
definiert sind. Erhalte ich damit nur Variablen oder auch Prozeduren und Funktionen? Na ja, und dann brauch ich halt noch die Zeilennummer der Quellcodezeile. Da brauch ich Eure Hilfe

@Christian: Ich wollte so ne Klasse wie den CmdLineDebugger oder den GDBMIDebugger im Notfall selber erstellen. Aber vielleicht krieg ich ja auch in diesem Forum jene Hilfe, die ich zum Verständnis der Debuggerklassen brauche. Dann brauch ich das natürlich nich nochmal zu erfinden. Dann nehme ich einfach diese Klassen. Dazu mussen meine obigen Fragen aber erst beantwortet werden.

Heut abend mach ich aber nix mehr. Ich hoffe, Ihr könnt mir helfen. Danke schon mal im Voraus

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

fragender (Blöder Nick ;-) Ich habe deine Frage noch nicht mal richtig durchgelesen. Es gibt halt Sachen, die man selber machen muss.
Die Codes in "debugger" geben dir viele Hinweise.
Ich war mal soweit, sowas in einer Kylix handgeschriebenen Ersatz-IDE zu verwenden siehe http://www.theo.ch/Kylix/dbgdemo2.png" onclick="window.open(this.href);return false; oder http://www.theo.ch/Kylix/dbgdemo1.png" onclick="window.open(this.href);return false; (man beachte hier den Gutter mit Breakpoint und durch blaue Punkte angezeigte ausführbare Zeilen. Diese Info ist nur via Debugger zu erhalten. Und achja, meine kleine Experimental IDE hatte schon Code Folding wie ihr seht. Ich meine.dass diese Bereiche der LazIDE diese Funktionaliät zur Verfügung stellen sollten).. viele Gedankenstriche...

Das hätte auch alles funktioniert aber dann hat mich der Mut verlassen, weil es mir zeitlich nicht möglich war einen Parser mit allen Schikanen zu schreiben.

"It's lonely at the top" da musst du selber durch und kannst nicht viel Forum Unterstützung erwarten.
Kleiner Tip: Wenn du aufläuftst, dann hat es mit der mangelnden Unterstützung von GDB fur Object Pascal zu tun.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also erstmal gibt es natürlich ein gdb frontend das auch untr Windows werkelt.
http://sources.redhat.com/insight/

Dann wie Theo schon sagte, schau dir einfach die Sourcen der Debuggerklasse an und sei dankbar das sie da ist. Wie wolltest du eine eigene schreiben wenn du unfähig bist etwas anderen Source zu verstehn ?!

Auch die Farge nach LineEnds lässt mich nicht mehr glauben das das für dich so einfach gewesen wäre. Was macht wohl eine Eigenschaft die Zeilenende heisst in einer Plattformübergreifenden Debuggerklasse ????

Schönes Wochenende
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

fragender
Beiträge: 6
Registriert: Mo 25. Jun 2007, 15:34
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Dresden

GDB mit Frontend erstellen

Beitrag von fragender »

Hallo Christian und Theo!

[quote="christian"]
schau dir einfach die Sourcen der Debuggerklasse an und sei dankbar das sie da ist. Wie wolltest du eine eigene schreiben wenn du unfähig bist etwas anderen Source zu verstehn ?!
[/quote]

[quote="theo"]
da musst du selber durch und kannst nicht viel Forum Unterstützung erwarten.
Kleiner Tip: Wenn du aufläuftst, dann hat es mit der mangelnden Unterstützung von GDB fur Object Pascal zu tun.
[/quote]

Herzlichen Dank für Eure überaus grosse Hilfsbereitschaft. Es muss doch jemanden geben, der sich da auskennt. In der aktuellen Lazarus-Version klappt doch der Schrittbetrieb auf Quelltextebene auch. Das hat doch irgendeiner gemacht. Ist dieses Wissen wirklich frei???
Sollte ich noch dahinter kommen, wie das funktioniert, werde ich Komponenten bauen für Lazarus und Delphi, so dass dann jeder Pleps einen Debugger bauen kann. Gelingt mir das nicht, werde ich endgültig von Open Source, Linux, GNU-Philosophie, GPL u.a. die Finger lassen.

Ich wollte ursprünglich bei der Weiterentwicklung von Lazarus mitarbeiten. Leider brauch ich da erst mal Hilfe auch in der Hinsicht: Welche Programmteile stehen in welcher Unit und in welchen Verzeichnissen finde ich diese dann. Wenn ich das nicht weiß, such ich mich dämlich. Auf der einen Seite wollt Ihr, das möglichst viele Leute an Euren Projekten arbeiten, auf der anderen Seite verweigert Ihr die notwendige Hilfe. Ein junger Baum braucht eben erst mal ne Stütze, bevor er selbständig allen Stürmen trotzt. Auf Arbeit müssen doch die Programmquellen auch so dokumemtiert werden, das ein Fremder genauso damit klarkommt. Aber bei der angeblich freien Software wird diese Hilfe verweigert. Für die Programmierer sind diese Quellen klasse Referenzen für ne Tätigkeit als Programmierer. Ich dagegen programmiere ausschließlich in meiner Freizeit, kriege also keinen müden cent dafür. Wenn ich mir da alles selber erarbeiten muss, geb ich meine Kenntnisse halt auch an niemenden weiter, es sei denn, das Geld stimmt.

Matthias Köppe von der Uni Magdeburg hat Turbo Vision grafisch gemacht. Für Turbo Pascal funktioniert alles, für Freepascal jedoch nicht. Einst wollte ich diesen Zustand ändern. Herr Köppe bot mir Unterstützung an, gegen eine Gebühr von 150,00Euro je Stunde. Und das für eine Klassenbibliothek, die damals schon veraltet war, als ich Herrn Köppe kontaktiert hatte.

Wenn ich unter diesen Umständen weiterhin keine richtige Hilfe kriege,häng ich Open Source an den sprichwörtlichen Nagel. Wenn richtige Unterstützung nur gegen Bares zu haben ist, muss ich halt kommerziell erhältliche Bibliotheken kaufen. Dort ist für das entsprechende Geld jeder Support enthalten.

Noch mal, ich wollte nach dem Bau eines eigenen Debuggers wie DDD, den es leider niur für Linux gibt, (Insight akzeptiert auf meinem Rechner keine Freepascal-exen) in die Lazarus Entwicklung einsteigen, die IDE mit weiterentwickeln, da ich zwar ne eigene angefangen habe, aber wenn es Lazarus nun mal gibt, könnte ich ja auch da mitmachen.

Aber bei der gegebenen Hilfsbereitschaft im OpenSource Bereich ist mir da die Lust vergangen.

Einst wollte ich die DOS IDE, die mit Free Vision geschrieben wurde, verbessern, habe im Freepascal Team Hilfe angefordert. Die wurde mir verweigert mit der Begründung, Free Vision könne wegen Lizenzproblemen noch nicht freigegeben werden. Aber statt dann gleich ne Grafische FreeVision zu bauen, wirde die genauso für den Textmodus entwickelt, wie das Original von Borland. Ich glaube, es ging damals gar nicht um die Lizenzproblematik, sondern um Ideologie, um Ausgrenzung bestimmter Personen, die unerwünschtes neues Gedankengut in die Softwarephilosophie einbringen wollen.

Vielleicht sollte ich wirklich die Debuggerquellen so lange studieren bis ich meinen eigenen Debugger bauen kann und dann die IDE Komponenten realisieren, egal wie lange ich dazu letztlich brauche. Wenn die Komponenten für Delphi und Lazarus erst existieren, ist wieder eine Elitebastion zerstört. Ich bleibe dran, verlasst Euch drauf!!!

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Versteh uns doch bitte nicht falsch, aber Pascal Source ist recht einfach zu lesen. Wenn du die Funktionen nicht aus dem Source ableiten kannst was möchtest du dann das wir dir helfen ?
Wenn wir die alles from the Scratch erklären müssen ohne das du dafür etwas tust dann ist das etwas viel verlangt.
Du kannst jederzeit mit konkreten Fragen kommen aber nicht mit "Ich kenn mich mit dem GDB nicht aus bitte erklärt mir mal wie ich den bedienen muss".
Du sagst du findest dich im Source nicht zurecht, willst aber komplexe Sachen schreiben. Das was du da alles aufgezählt hast ist nicht gerad die beste Anfängermaterie.
Du kannst doch kein Buch schreiben ohne Lesen zu können !
Sollte ich noch dahinter kommen, wie das funktioniert, werde ich Komponenten bauen für Lazarus und Delphi, so dass dann jeder Pleps einen Debugger bauen kann.
Das ist doch die T***Debugger Klasse von lazarus schon. Was willst du denn noch ? Sie ist nicht dokumentiert aber wenn man in den Source guckt kann man wunderbar erkennen was sie womit macht. Weiterhin verraten die Namen der Eigenschaften und Funktionen meisst schon was sie machen.
Gelingt mir das nicht, werde ich endgültig von Open Source, Linux, GNU-Philosophie, GPL u.a. die Finger lassen.
OpenSource ist keine verpflichtung für die Leute dir zu helfen. Ich erlebe das ständig das die leute über Open Source und Freeware meckern hingegen sind sie zufrieden wenn Sie was bezahlen dürfen. Was soll das ?
Ich bin übrigends mit 100 Eur die Stunde völlig zufrieden wenn ich dir deine Debuggerklassen schreiben soll oder wahlweise dir auch alles von der Pike auf erklären soll.
Ansonsten beschäftige dich mit der Thematik und stell gezielte Fragen dann wird dir auch geholfen soweit das die Zeit und das Wissen der Leute zulässt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

@fragender:Was soll denn jetzt dieser Pathos und dieser aggressive Unterton?
Der Grund, warum dir hier keiner deine Fragen beantwortet ist schlicht dass es keiner weiss.

Ich weiss nur eins: Die Lazarus IDE kann das und es sind alle Sourcen vorhanden.
Wenn ich also kurz ins Verzeichnis "ide" schaue, finde ich einen Datei namens:
"debugmanager.pas".
Dort drin gibt's schöne Eventhandler wie
OnDebuggerCurrentLine
OnDebuggerChangeState
OnDebuggerException
etc.
Vielleicht findest du da was du suchst.

Ich hab aber keine Ahnung.

fragender
Beiträge: 6
Registriert: Mo 25. Jun 2007, 15:34
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Dresden

GDB mit Frontend benutzen

Beitrag von fragender »

Hallo!

Danke erst mal für den entscheidenden Tipp,
Ok, ich soll also gezielter fragen. Bisher konnte ich das nicht, weil
ich erst mal wissen musste welche Debuggerteile in welcher Unit stehen. In der
Unit DebugManager.pas gibt es also die Ereignisbehandlungsmethode OnDebuggerCurrentLine()
mit den Parametern Sender: TObject und Location: TDBGLocationRec. Nur, da ich den
Parameter Location übergeben muss, frage ich jetzt, wo kriege ich die Information
her, die in der Variablen mit dem Namen Location stehen muss. Gibt es da eine Methode
die das erledigt? Und wieder, in welcher Unit steht der Code dafür. Ist vielleicht die Funktion GetLine verantwortlich. Hab jetzt grad die Unit vergessen, in der die Funktion enthalten ist. Oder sind da andere Funktionen, Prozeuren, Methoden oder Klassen vorgesehen? Und welche sind es, die den TDBGLocationRec füllen?

Tut mir leid, gezielter kann ich bei der derzeitigen Kenntnis der Quelltexte nicht fragen. Da die Quelltexte nicht kommentiert und auch nicht dokumentiert sind, dauert es seine Zeit, bis ich die Infos zusammen habe, die ein gezielteres Fragen möglich machen würden.

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: GDB mit Frontend benutzen

Beitrag von theo »

fragender hat geschrieben:Hallo!
Ok, ich soll also gezielter fragen.
Nö. Hab ich doch schon gesagt: das weiss in diesem Forum keiner. Das ist Neuland für alle hier (behaupt' ich mal).
Wenn du Glück hast, Antwortet Dir der Entwickler dieser Units.
http://www.lazarus.freepascal.org/modul ... sURL=maill" onclick="window.open(this.href);return false;

Vielleicht brauchst du auch Informationen von den GDB Leuten.
http://sourceware.org/gdb/mailing-lists/" onclick="window.open(this.href);return false;

fragender
Beiträge: 6
Registriert: Mo 25. Jun 2007, 15:34
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Dresden

GDB mit Frontend benutzen

Beitrag von fragender »

Hallo theo,

danke für die Links. Ich werde nun dort weiter fragen.

es grüßt fragender

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wie schon mal gefragt warum schaust du net einfach in die Sourcen, da steht ja bekanntlich alles drin sonst wären sie ja nicht üersetzbar. Deklarationen in anderen units findest du mithilfe der Codetools meisst mit 2 Klicks man kann sich damit genial durch unbekannte Sourcen hangeln.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten