Seite 1 von 1

QT Debuggen: Variablen überwachen

Verfasst: 18. August 2008 15:07
von hm
Hallo,
ich versuche mich gerade in QT 4.4 OpenSource Variante unter Windows mit MinGW und der mod Mingw-gdb Version einzuarbeiten.

Soweit so gut. Ich kann erste Programme comp. & debuggen, habe aber ein Problem beim debuggen von QT-Anwendungen. Als Frontend benutze zurzeit Eclipse mit dem QTPlugin, unter edyuk ist es aber das gleiche. gdb per Kommandozeile habe ich aus Unkenntnis nicht probiert.

Wenn ich nun mein Programm per Haltepunkt stoppe, möchte ich mir oft den Inhalt bestimmter (lokaler) Variablen/Eigenschaften, z.B. von QString, anzeigen lassen. Leider bekomme ich immer nur eine nicht aussagekräfte Baumstruktur zu Gesicht? Ich meine mich zu erinnern, das ich unter KDE/KDevelop schon gesehen habe, dass der Debugger QT-Objekte in Klartext auflösen kann.

Hat jemand ne Ahnung was ich falsch mache, bzw. was mir fehlt?

grüße hm

Nachtrag

Verfasst: 20. August 2008 16:13
von hm
Hallo,
es würde mir ja schon helfen, wenn ich wüste ob das ein typ. Problem ist oder es an mir liegt! Also bitte mal Antworten, ob jemand anderes das Problem auch hat, bzw. mal schreiben das bei ihm alles geht.

btw. ich habe inzwischen qdevelop ausprobiert. Qdevelop kann einen QString richtig beobachten! Leider wird aber von Qdevelop/ctags das qt-verzeichnis nicht indiziert, sodass die die code completion nicht vernünftig funktioniert..... :(

hm

Verfasst: 20. August 2008 16:25
von jd
Hallo, ich muss mich da anschließen, ich habe genau das selbe Problem und weiß da auch nicht richtig weiter. So was macht das Debuggen recht schwierig. Würde mich auch freuen, wenn da jemand ein paar Tipps hat.

Verfasst: 20. August 2008 17:08
von RHBaum
Also beim VS hangel ich mich bei den QTObjecten auch durch die baumstruktur bis ich auf den datenpointer komme .... der iss ja nen dynamischer 16bittiger string, und den kann der debugger von VS aufloesen.

geht das bei euch ned .... ?

direkt ne anzeige bei QString, das der wert drinne steht hab ich auch ned ...

Ciao ....

Verfasst: 20. August 2008 17:43
von jd
Bei mir nicht... wobei das etwas schwer zu sagen ist, da das bei mir zig tausend mal verschachtelt ist und nach 100 Klicks verlierst du den Überblick.

Das ist eine Zumutung... Falls das Eclipse bei mir anzeigen würde und ich das nur nicht finde, ist das nicht vertretbar... Da bin ich schneller wenn ich von Hand debugge und immer ein qDebug() in meinen Code einfüge, jedoch ist das keine gute alternative...

// EDIT hier ist mal ein Screenshot:
Bild

Und hier mal noch der Code dessen Inhalt ich gerne einsehen würde:

Code: Alles auswählen

typedef struct {
		QString label;
		QString suite;
		int winSystem;
		int unixSystem;
		QString description;
		QString url;
		bool authentication;
		QString username;
		QString password;
	}SRepository;

	static QList<SRepository*> repositoryList;

Ein noch nicht ganz befriedingender Workaround()

Verfasst: 22. August 2008 10:07
von hm
Hallo,
ich bin ein stückchen weiter bei meinem Problem. Ich kann als Watch auch eine funktion eingeben, so z.B.

Code: Alles auswählen

QString strTest = "Blablabla";
dann beobachte ich im Debugger:

Code: Alles auswählen

 strTest.size() 
und bekomme dann in der Anzeige ein int mit der richtigen Anzahl.

Leider funktioniert das nicht bei

Code: Alles auswählen

 strTest.toStdString() 

welches mit ein char* zurückgeben sollte

Es funktioniert aber wiederum

Code: Alles auswählen

 strTest.toLatin() 

Jetzt habe ich ein QByteArray. Im QBytearray sehe ich in der Baumstruktur meinen String. Kann ihn aber immer noch nicht isolieren?
Ich probiers weiter..., evtl. hat ja jemand ne Lösung wie ich direkt im debugger drauf zugreifen kann

gruesse hm