Xcode-Debugger: Kann nicht in Qt4-Code hineinsteppen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Xcode-Debugger: Kann nicht in Qt4-Code hineinsteppen

    Ich habe Xcode 3.0 auf einem iMac mit Mac OS X Leopard und keine Erfahrung mit Mac OS X und Xcode. Mein Xcode-Projekt basiert auf Custom-Makefiles und soll auf Windows, Linux und Mac OS X mit Qt4 laufen.

    Das Projekt lässt sich auch erfolgreich kompilieren und binden, und die Anwendungen laufen auch.

    Aber: Ich kann in dem Xcode-Debugger nur in unserem eigenen Code debuggen, aber nicht in den Qt4-Code hineinsteppen. Vermutlich muss man dem Xcode noch irgendwie mitteilen, wo die Qt4-Quellen zu finden sind, aber wie?

    (Ich sehe nicht einmal, wie man in dem Datei-Auswahl-Dialog des Finders /usr/local/... spezifizieren kann.)

    (Qt4 habe ich mit "-debug-and-release" übersetzt und gebunden. Es wird standardmäßig in /usr/local/Trolltech/Qt-4.3.2 installiert.)

    ____________________________________________________________

    Wen's interessiert: Unsere Projekt-Homepage.
    Merke: Nichts steht fest, selbst das nicht!
  • RE: Xcode-Debugger: Kann nicht in Qt4-Code hineinsteppen

    Original von wandro(Qt4 habe ich mit "-debug-and-release" übersetzt und gebunden. Es wird standardmäßig in /usr/local/Trolltech/Qt-4.3.2 installiert.)


    Dann müsste es eigentlich funktionieren.

    Wichtig sind zwei Dinge:

    1) Der Code muss mit Symbols übersetzt sein (-g), ich gehe davon aus, das er das ist
    2) Die Source müssen da sein, wo sie waren als übersetzt wurde.

    Probier es mal mit Command Line gdb, der gibt manchmal klarere Fehlermeldungen.

    Alex
    The only thing that really worried me was the ether.
  • RE: Xcode-Debugger: Kann nicht in Qt4-Code hineinsteppen

    Qt4 wird standardmäßig mit -gdwarf-2 übersetzt. Deshalb übersetze ich unsere Programme auch mit -gdwarf-2. Vorher hatte ich immer -gstabs+, konne aber auch nicht in Qt4 reinsteppen.

    Die Qt4-Quellen sind noch in /usr/local/Trolltech/qt..., wo sie beim Übersetzen von Qt4 waren.

    Muss man nicht Xcode sagen, dass sie dort sind? oder müsste das automatisch gehen?
    Merke: Nichts steht fest, selbst das nicht!
  • RE: Xcode-Debugger: Kann nicht in Qt4-Code hineinsteppen

    Original von wandro
    Qt4 wird standardmäßig mit -gdwarf-2 übersetzt. Deshalb übersetze ich unsere Programme auch mit -gdwarf-2. Vorher hatte ich immer -gstabs+, konne aber auch nicht in Qt4 reinsteppen.

    Die Qt4-Quellen sind noch in /usr/local/Trolltech/qt..., wo sie beim Übersetzen von Qt4 waren.

    Muss man nicht Xcode sagen, dass sie dort sind? oder müsste das automatisch gehen?


    Müsste automatisch gehen

    Alex
    The only thing that really worried me was the ether.
  • Hallo,

    Ich hatte die selben Probleme

    Check mal folgendes:

    Werden die Debug Symbole von Qt geladen?

    Wenn nicht setzt mal die Variable DYLD_IMAGE_SUFFIX auf _debug.

    Das Problem ist hierbei dass aber von allen Frameworks dann die Debug Varianten geladen werden. Falls das nicht erwünscht ist geht folgendes:
    In jedem Qt Framework machst Du, als Beispiel hier QtCore

    ln -s QtCore_debug $QTDIR/QtCore.framework/Versions/4.0/QtCore_debugqt

    Dann kannst Du das DYLD_IMAGE_SUFFIX auf _debugqt setzen. Dieser workaround lädt dann nur die qt debug libs.

    Dann sollte es funktionieren.

    Gruss

    Exo
  • Original von Exolon
    ...

    Werden die Debug Symbole von Qt geladen?

    Wenn nicht setzt mal die Variable DYLD_IMAGE_SUFFIX auf _debug.



    Danke!

    Das mit dem DYLD_IMAGE_SUFFIX hat funktioniert.

    Vorher hatte ich es erst mit "-F$(QTDIR)/lib -framework QtCore,debug" versucht, ohne Erfolg: Es wurde die Release-Library genommen. Auch "-F$(QTDIR)/lib -Wl,-framework,QtCore,debug" hatte keinen Erfolg, im Widerspruch zu den man pages von ld.

    Inzwischen hat sich noch herausgestellt, dass die QtAssistant_debug - Lib irrtümlich auch von QtGui (Release-Version) abhängt, was dann zu doppelt definierten Symbolen (in QtGui und QtGui_debug) und Anwendungs-Absturz führt. Das habe ich schon an Trolltech gemeldet.

    Ich habe es auch beim Qt-Build mit der configure-Option -noframework versucht.

    Das hat auch im Prinzip funktioniert. Man kann dann mit "-L$(QTDIR)/lib -lQtCore_debug" erfolgreich linken. Aber in qassistantclient.cpp, Zeile 200, wird der Pathname des assistant Executables auf eine Weise verlängert, die nur anwendbar ist, wenn Qt mit Frameworks erzeugt wird. Auch das habe ich schon bei Trolltech gemeldet.

    Mac OS scheint dort etwas vernachlässigt zuwerden.

    ____________________________________________________________

    Noch eine andere Frage: Hast du schon herausgefunden, ob es unter Xcode für das Debuggen von QStrings u.ä. eine intelligentere Lösung gibt, als die üblichen PrintQString-Functions in .gdbinit/.gdbrc?

    Nochmals danke, Gruß,

    Klaus.
    Merke: Nichts steht fest, selbst das nicht!
  • Hallo Klaus,

    bzgl. der QStrings kannst du dir ne globale Hilfsfunktion schreiben welche den string nach ascii wandelt:

    Quellcode

    1. const char* qs2str(const QString &qstr)
    2. {
    3. return qstr.toAscii().constData();
    4. }


    die Funktion nimmst du dann bei XCode als custom data formatter für die QStrings

    Quellcode

    1. {(char*)qs2str($VAR)}:s


    Das feature 'Enable Data Formatters' anschalten nicht vergessen.

    Dann siehst Du die QString im debugger wie gewollt Im Summary Teil des Variable Windows.
  • Hallo Exolon,

    erst mal herzlichen Dank für die kompetenten Hinweise. Da bin ich ja anscheinend genau an den richtigen Experten geraten. Ich werde das mit den custom data formatters bei nächster Gelegenheit ausprobieren.

    Momentan bin ich von Mac OS und Xcode noch etwas verschreckt, weil das mit der Debug-Version von Qt auf dem Mac schon solche Probleme gemacht hat und weil eine unserer Anwendungen, die auf Windows und Linux problemlos läuft, auf Leopard tief unten im Qt und Cocoa abstürzt und ich keine Ahnung habe, wie ich das klären soll. Mir scheint, dass Qt auf dem Mac noch nicht so gründlich erprobt ist.

    Gruß,

    Klaus.
    Merke: Nichts steht fest, selbst das nicht!
  • Wenn du konkrete Fragen hast kannste gerne auch mal nen Teil des callstacks posten.
    Ich schau dann ob ich helfen kann.

    Lass Dich nicht von Qt aufm Mac verschrecken. Ist zwar nicht ganz so doll gepflegt wie unter Linux, liegt aber wohl daran dass es aufm Mac auch noch zu wenig Qt User gibt.

    Ganz einfach: Je mehr Qt User auf Mac um so mehr Support fürn Mac.

    Also: Dabei bleiben :)

    Gruss

    Exo
  • Nach über einem Jahr wollte ich wieder einmal in Qt4-Funktionen hineinsteppen. Aber das geht jetzt plötzlich nicht mehr so wie im November 2007. Ich kann mit der Aktivitätsanzeige sehen, dass die Debug-Version der Qt4-Libraries geladen wird (z.B. QtCore_debug), aber es funtioniert trotzdem nicht.

    Es ist auch egal, ob ich mit DYLD_IMAGE_SUFFIX oder "Use debug suffix when loading frameworks" in den "Executable settings" von XCode arbeite. In beiden Fällen werden die Qt4-Debug-Libraries zwar geladen, aber das Hineinsteppen geht nicht: "Step into" hat den gleichen Effekt wie "Continue".

    Es nutzt auch nichts, wenn ich in den "Debugging"-Settings die Qt4-Quellen-Directories ausdrücklich angebe. (Ich habe Qt4 in Quellenform heruntergeladen und "configure/make/make install" ausgeführt.)

    Auch mit dem Qt4 Binary Download mit Debugging Symbols geht es genausowenig.

    Auch der Umstieg von "g++ -gstabs2" zu "g++ -gdwarf-2" hat nichts genützt.

    Auch der Linemode-GDB steppt nicht in Qt4-Funktionen.

    Hat vielleicht jemand eine Ahnung, warum das jetzt nicht mehr geht?

    Klaus.
    Merke: Nichts steht fest, selbst das nicht!
  • Inzwischen habe ich herausgefunden, dass Xcode -gstabs+ nicht mehr unterstützt, sondern nur noch -gdwarf-2. Qt4 wird aber standardmäßig nicht mit -gdwarf-2 übersetzt, hataber eine configure-Option -dwarf2. Wenn man diese benutzt und Qt4 aus den Quellen neu erstellt, funktioniert anschließend das Hineinsteppen (wenn man auch noch in den Executable-Settings den famework-suffix auf "debug" gesetzt hat).

    Wie man das gleiche auch unter Eclipse und Netbeans erreicht, habe ich noch nicht herausgefunden.

    Das Setzen von DYLD_IMAGE_SUFFIX=_debug reicht jedenfalls nicht. Bei Netbeans werden trotzdem die Release-, und nicht die debug-Libraries geladen, und bei Eclipse funktioniert das Hineinsteppen nicht, obwohl die Debug-Libraries geladen werden.
    Merke: Nichts steht fest, selbst das nicht!