Eclipse Debugger und C++



  • Ich habe jetzt mein Projekt in Eclipse CDT aufgesetzt und alles so eingestellt, dass ich in Eclipse mein Projekt auch debuggen kann. Eigentlich komme ich ja aus der Javawelt und dort kann man ja eine toString()-Methode in einer Klasse schreiben. Wenn man sich ein Objekt dann im Debugger anschauen möchte, schreibt Eclipse immer die Ausgabe von toString() in die Variables-Box in der Debug-Perspektive.

    Nun, da ich jetzt C++ benutze frage ich mich ob es sowas auch dafür gibt? Ich habe zB ein Objekt welches ein Objekt folgenden Typs enthält "std::vector< std::vector<int> > A". Wenn ich dieses A-Objekt dann in die Variabeles-Box reinziehe, dann kann ich mir dort nicht den Inhalt des Vektorobjekts anschauen, sondern erhalte sowas hier:

    {A = {<std::_Vector_base<std::vector<int, std::allocator<int> >,std::allocator<std::vector<int, std::allocator<int> > > >> = {_M_impl = {<std::allocator<std::vector<int, std::allocator<int> > >> = {<__gnu_cxx::new_allocator<std::vector<int, std::allocator<int> > >> = {<No data fields>}, <No data fields>}, _M_start = 0x5001a0, _M_finish = 0x5001e8, _M_end_of_storage = 0x5001e8}}, <No data fields>}, rows = 6, cols = 4}

    Finde ich jetzt unverständlich und nicht hilfreich, weil ich mir nicht anschauen kann was in den Vektoren steht.

    Deshalb würde ich gerne eine Methode wie die hier schreiben:

    void toString() {
    
    		std::cout << "rows = " << rows << " cols = " << cols << std::endl;
    
    		for( unsigned int j = 0; j < cols; ++j ) {
    			for( unsigned int i = 0; i < rows; ++i )
    				std::cout << A.at(i).at(j) << "\t";
    			std::cout << "\n";
    		}
    	}
    

    Die soll dann wie bei Java vom Debugger ausgeführt werden und zeigt mir dann den Inhalt meines Objekts an.

    Gibt es sowas bzw sowas ähnliches auch für C++ und Eclipse? Finde diese Funktion unglaublich praktisch.



  • Benutz doch lieber Visual C++ 2010, das hat einen vernünftigen Debugger.



  • Nein, weil ich kein Windows benutze.


  • Administrator

    HändyÄndy schrieb:

    Gibt es sowas bzw sowas ähnliches auch für C++ und Eclipse? Finde diese Funktion unglaublich praktisch.

    Was hat das mit C++ zu tun? Das ist die Aufgabe des Debuggers, bzw. von Eclipse. Ich würde allerdings nicht in Eclipse C++ programmieren wollen, weil die IDE in erster Linie auf Java ausgerichtet ist.

    Nach meinen letzten Informationen (mitte 2009), kann man in Eclipse auch nicht direkt die Werte eines STL Containers betrachten. Dazu muss man sich der GDB Konsole bedienen.

    Wenn du auf eine andere IDE wechseln kannst, dann würde ich dir dringend dazu raten. Für Linux gäbe es zum Beispiel Code::Blocks. Da diese IDE auf C++ ausgerichtet ist, nehme ich an, dass sie den GDB besser integriert haben.

    Grüssli



  • Bin Applenutzer. Was soll man denn da benutzen? XCode macht auf mich jedenfalls keinen besonders guten Eindruck.


  • Administrator

    HändyÄndy schrieb:

    Bin Applenutzer. Was soll man denn da benutzen? XCode macht auf mich jedenfalls keinen besonders guten Eindruck.

    Apple wegschmeissen ... 😃 🤡
    Code::Blocks ist auch für den Mac verfügbar, allerdings nicht stabil, da sie zu wenig Entwickler haben: http://www.codeblocks.org/
    Ansonsten gibt es noch CodeLite als auf C und C++ ausgelegte IDE. Bei dieser scheint der MAC-Port aktuell zu sein: http://www.codelite.org/

    Grüssli



  • Danke für die Links. Also ich habe jetzt mal beide IDEs gestestet und sie sind meiner Meinung nach klar durchgefallen. Mal abgesehen davon, dass zumindest CodeBlocks schon mind 2 Jahre alt ist (und das für alle Systeme), zeigt der Debugger ebenfalls den Inhalt der Vektorobjekte nicht an. Damit lösen diese IDEs mein Porblem nicht. Bisher ist Eclipse CDT klar die beste Alternative.

    Hat jemand vielleicht noch Vorschläge wie man so eine toString()-Methode mit dem Debugger kombiniert?


  • Administrator

    Habe mich nochmals ein wenig zum Thema informiert. Problem scheint vollständig bei GDB zu liegen, welcher nicht in der Lage ist, sowas einfach anzuzeigen. Man muss sich hierzu Scripts erstellen, welche an den GDB übergeben werden müssen, damit er die Container sinnvoll auswertet:
    http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

    Alles andere als trivial, da schätze ich gleich den MSVC Debugger noch viel mehr 😃
    Viel weiter kann ich dir da auch nicht mehr helfen. Ich benutze den GDB nur sehr selten. Vielleicht verschiebt dich ein Moderator noch ins Compiler Forum, wo vielleicht ein paar mehr Leute Ahnung vom GDB haben und dir eine einfache Lösung präsentieren können.

    Grüssli



  • Für Code::Blocks gibt es immer aktuelle Nightly Builds, die man grundsätzlich benutzen sollte. Ob die jemand fürn Mac bereitstellt, weiß ich allerdings nicht. Ansonsten steht in den nächsten Tagen/Wochen eine neue "stable" Version an.
    Es werden auch Vektorinhalte angezeigt, wenn du sie über den Editor hinzufügst (Rechtsklick während der Debugger läuft und Watch 'x' wählen).



  • Dravere schrieb:

    HändyÄndy schrieb:

    Bin Applenutzer. Was soll man denn da benutzen? XCode macht auf mich jedenfalls keinen besonders guten Eindruck.

    Apple wegschmeissen ... 😃 🤡

    Du hast auf mich immer einen sehr kompetenten Eindruck gemacht, versau dir dein
    Image nicht 😡

    Aber ich muss dir (leider) recht geben. Es gibt keine vernünftige IDE für Mac OS X.
    XCode ist crap. Ich persönlich entwickel - wenn ich mal Zeit habe - in Eclipse
    und wenn man mal etwas debuggen muss, dann greif ich auf gdb in der guten alten
    Konsole zurück. Dabei debugge ich nur, wenn mein Programm misteriöserweise abschmiert.
    Inzwischen kommt das aber nicht mehr sooo häufig vor 🙂

    btw: Ich würde seit DOS kein Microsoft-Produkt mehr als Betriebssystem mehr bezeichnen.

    Ich hab vor ca. 3 Jahre von Microsoft zu Mac gewechselt und hab es zu keiner
    Zeit bereut.
    Ich persönlich mag den Cocoa-Unterbau allerdings auch nicht und wrappe mir
    teilweise Objective-C-Code um reines C++ verwenden zu können.

    Wenn Apple jetzt noch ne C++-API (außer Carbon) rausbringt, bin ich happy 🙄

    Nein, ich bin kein Apple-Jünger... Ich halte z. B. das iPad für crap und
    bin auch kein Fan vom iPhone.

    Gruß,
    CSpille



  • CSpille schrieb:

    btw: Ich würde seit DOS kein Microsoft-Produkt mehr als Betriebssystem mehr bezeichnen.

    😮



  • Dravere schrieb:

    Was hat das mit C++ zu tun? Das ist die Aufgabe des Debuggers, bzw. von Eclipse. Ich würde allerdings nicht in Eclipse C++ programmieren wollen, weil die IDE in erster Linie auf Java ausgerichtet ist.

    Nichts desto trotz ist Eclipse+CDT nach meinen Beobachtungen mir großem Abstand die beste IDE für C++. Gerade Visual Studio (okay, ich benutze 2008) verdient meiner Meinung nach die Bezeichnung IDE nicht. 2010 mag besser sein, aber das kenne ich nicht.
    Und es ist nicht der Eclipse-Debugger, der diese Ausgabe produziert, sondern vermutlich gdb.

    PS: Das ist natürlich 'ne Meinung. Ich brauche, wie dazu anmerken muss selten einen Debugger, weil ich viel mit boost.asio rumschraube, und er dabei leider selten wirklich hilfreich ist.


  • Administrator

    CSpille schrieb:

    Du hast auf mich immer einen sehr kompetenten Eindruck gemacht, versau dir dein
    Image nicht 😡

    Mein Image ist mir egal. Ich bin lieber, wer ich bin.
    Allerdings zu deiner Beruhigung und eigentlich dachte ich, dass die Smilies dies schon klar genug machen würden: Das war nicht ernst gemeint! 😃

    CSpille schrieb:

    btw: Ich würde seit DOS kein Microsoft-Produkt mehr als Betriebssystem mehr bezeichnen.

    Zum Glück müssen wir nicht alle einer Meinung sein. Allerdings halte ich die Aussage, vor allem ohne Smilies, für sehr provokant und nutzlos 😉

    Tachyon schrieb:

    Gerade Visual Studio (okay, ich benutze 2008) verdient meiner Meinung nach die Bezeichnung IDE nicht.

    Naja, du musst halt wie in Eclipse dir zuerst ein paar Plugins besorgen, bzw. vor allem eines: Visual Assist X. Allerdings macht VAX eigentlich nur noch den Feinschliff. Ich wüsste nicht, wieso man Visual Studio nicht als IDE bezeichnen können sollte. Halte ich wie die Aussage oben von CSpille für sehr provokant und völlig nutzlos ...

    Tachyon schrieb:

    PS: Das ist natürlich 'ne Meinung. Ich brauche, wie dazu anmerken muss selten einen Debugger, weil ich viel mit boost.asio rumschraube, und er dabei leider selten wirklich hilfreich ist.

    CSpille schrieb:

    Dabei debugge ich nur, wenn mein Programm misteriöserweise abschmiert.

    Ich bin erstaunt darüber, wie wenig ihr einen Debugger verwendet. Sobald ein Algorithmus nicht den gewünschten Output liefert, grenze ich das Problem ein und werfe dann den Debugger an. Es gibt nichts besseres, um einen Fehler zu finden, als Schrittweise über diesen hinwegzugehen. Auch mit Boost.Asio habe ich schon oft den Debugger verwendet. Sogar zum Teil gleich doppelt: Auf dem Client und Server.
    Ich stelle mal eine gewagte Behauptung in den Raum: Benutzt ihr so selten den Debugger, weil der GDB so schlecht bedienbar ist?

    Grüssli



  • Dravere schrieb:

    Naja, du musst halt wie in Eclipse dir zuerst ein paar Plugins besorgen, bzw. vor allem eines: Visual Assist X. Allerdings macht VAX eigentlich nur noch den Feinschliff. Ich wüsste nicht, wieso man Visual Studio nicht als IDE bezeichnen können sollte. Halte ich wie die Aussage oben von CSpille für sehr provokant und völlig nutzlos

    Das war keine Aussage, sondern eine Meinung. Steht sogar fett dran. 😉

    VAX ist recht teuer (betrifft mich nur privat), bzw. in der Toolchain meiner Firma nicht zugelassen.

    Und der Grund, wieso ich Visual Studio so grausam finde (wie gesagt 2008, 2010 kenne ich nicht) ist der, dass z.B. Intellisense schon bei recht einfachen Konstrukten aussteigt und auch nicht in der Lage ist, sich selbst zu recovern. Wenn das Dingens sich mal richtig aufhängt, dann geht die komplette IDE gleich mit den Bach runter. Irgendwelche boost-Geschichten schaffen das regelmäßig.

    Die Vervollständigung ist unzuverlässig und funktioniert nach völlig undurchschaubaren Regeln mal einigermaßen gut, dann mal wieder gar nicht.

    Dazu kommt, dass man kaum Freiheiten bei der Konfiguration des Editors hat, was z.B. Einrückung und Umbruch betrifft. Das Gleiche gilt für das Highlighting.

    Headerfiles findet er gar nicht, dass heisst, wenn man Projekte mit vielen Dateien hat (so um die 3000 + diverse COTS Libraries) dann muss man mühsam suchen. Bei Eclipse reicht eine grobe Ahnung und dann Ctrl+Space.

    Klar es geht auch ohne, aber dann frage ich mich: Wozu eine IDE? Nur aufgrund des Debuggers? Ich denke nicht.



  • Tachyon schrieb:

    Und der Grund, wieso ich Visual Studio so grausam finde (wie gesagt 2008, 2010 kenne ich nicht) ist der, dass z.B. Intellisense schon bei recht einfachen Konstrukten aussteigt und auch nicht in der Lage ist, sich selbst zu recovern. Wenn das Dingens sich mal richtig aufhängt, dann geht die komplette IDE gleich mit den Bach runter. Irgendwelche boost-Geschichten schaffen das regelmäßig.

    Die Vervollständigung ist unzuverlässig und funktioniert nach völlig undurchschaubaren Regeln mal einigermaßen gut, dann mal wieder gar nicht.

    Dazu kommt, dass man kaum Freiheiten bei der Konfiguration des Editors hat, was z.B. Einrückung und Umbruch betrifft. Das Gleiche gilt für das Highlighting.

    Headerfiles findet er gar nicht, dass heisst, wenn man Projekte mit vielen Dateien hat (so um die 3000 + diverse COTS Libraries) dann muss man mühsam suchen. Bei Eclipse reicht eine grobe Ahnung und dann Ctrl+Space.

    Klar es geht auch ohne, aber dann frage ich mich: Wozu eine IDE? Nur aufgrund des Debuggers? Ich denke nicht.

    Die meisten Sachen die du bemängelst werden in VS2010 komplett behoben:
    - IntelliSense funktioniert auch bei großen Projekten einwandfrei und schnell.
    - Headerfiles kann man jetzt wie in Eclipse mit Autovervollständigung includen.
    - Mir gefallen die Standardeinstellungen vom Editor ganz gut, daher hab ich nicht wirklich getestet was man da so machen kann.

    Da wir in unseren Entwicklungs-VMs Adminrechte haben hab ich mir da VS2010 aus der MSDNAA installiert und entwickel nurnoch darmit. Falls ich mal nen Build für ne Testmaschine brauche wird halt kurz VS2008 angeschmissen. Das Nachziehen der paar Änderungen in den sln- und vcproj-Dateien ist mit nem diff-Tool kein großer Aufwand, die Zeit hol ich durchs schnellere Entwickeln 10 mal raus.

    Imho hat MS mit VS2010 nen ganz großen Wurf hingelegt.


  • Administrator

    Tachyon schrieb:

    VAX ist recht teuer (betrifft mich nur privat), ...

    Einmalig 250, dann hast du ein Jahr Support. Du musst nicht laufend erneuern, ich mache seit über einem Jahr Pause und habe nicht mehr erneuert. Werde dann mit dem Umstieg auf 2010 erneuern. Eine Erneuerung kostet 50 und hält ein Jahr. Kann man wirklich nicht viel dazu sagen.
    Sonst kannst du auch für 100$ eine Lizenz kaufen mit 6 Monaten support. Allerdings kann man diese Lizenz nicht erneuern.

    Tachyon schrieb:

    Und der Grund, wieso ich Visual Studio so grausam finde (wie gesagt 2008, 2010 kenne ich nicht) ist der, dass z.B. Intellisense schon bei recht einfachen Konstrukten aussteigt und auch nicht in der Lage ist, sich selbst zu recovern. Wenn das Dingens sich mal richtig aufhängt, dann geht die komplette IDE gleich mit den Bach runter. Irgendwelche boost-Geschichten schaffen das regelmäßig.

    1. VAX hilft mir da, daher kann ich schlecht beurteilen, wie dies ohne ist. Mit VAX funktioniert es jedenfalls zauberhaft.
    2. Meine Erfahrung ist, dass die Autovervollständigung von Eclipse bei grösseren Projekten auch völlig einknickt. Aber ich bin da auch nicht auf dem ganz neusten Stand. Ich vermeide Eclipse, weil es mir überhaupt nicht zusagt. Für Java verwende ich hauptsächlich NetBeans.

    Tachyon schrieb:

    Die Vervollständigung ist unzuverlässig und funktioniert nach völlig undurchschaubaren Regeln mal einigermaßen gut, dann mal wieder gar nicht.

    Mit VAX wunderbar, kann ich also nix dazu sagen 🙂

    Tachyon schrieb:

    Dazu kommt, dass man kaum Freiheiten bei der Konfiguration des Editors hat, was z.B. Einrückung und Umbruch betrifft.

    Ja, das stimmt, aber weisst du was? Da hilft dir VAX 😉

    Tachyon schrieb:

    Das Gleiche gilt für das Highlighting.

    Das hingegen ist Humbug. Tools -> Options -> Environment -> Fonts and Colors
    Was um alles in der Welt willst du mehr? Und vor allem ist alles schön beisammen, während es bei Eclipse über alle Einstellungen hinweg verteilt ist. Hab letztens fast die Krise bekommen, als ich ein anderes Theme einstellen wollte. Da ist auch NetBeans um Längen voraus.

    Tachyon schrieb:

    Headerfiles findet er gar nicht, dass heisst, wenn man Projekte mit vielen Dateien hat (so um die 3000 + diverse COTS Libraries) dann muss man mühsam suchen. Bei Eclipse reicht eine grobe Ahnung und dann Ctrl+Space.

    Mit VAX wunderbar, kann ich also nix dazu sagen ... 😃

    Tachyon schrieb:

    Klar es geht auch ohne, aber dann frage ich mich: Wozu eine IDE? Nur aufgrund des Debuggers? Ich denke nicht.

    Also eine IDE nur auf diese Punkte zu reduzieren, halte ich schon ein wenig heftig. Deine womöglich korrekten Kritikpunkte zielen alle nur auf das IntelliSense ab. Autovervollständigung macht aber keine IDE aus. Im Gegenteil, eine IDE muss nicht mal Autovervollständigung enthalten, um eine solche zu sein. Lies dir mal die Wikipedia-Artikel (Deutsch, Englisch) zur Definition einer IDE 😉
    http://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung
    http://en.wikipedia.org/wiki/Integrated_development_environment

    Es ist ein Zusammenführen von verschiedenen Werkzeugen für die Entwicklung. Autovervollständigung kann eines davon sein, muss aber nicht und ist meiner Meinung nach bei weitem nicht das Wichtigste.

    (Noch in der Vorschau erblickt)
    @rean,
    Wie sieht es denn eigentlich mit der Gerschwindigkeit des GUI von VS2010 aus? Dazu gab es während der Betaphase öfters mal Kritik zu hören. Konnte es bisher aber noch nicht selber testen.

    Grüssli



  • Dravere schrieb:

    ...

    Okay, halten wir mal fest: Circa 90% der Kritikpunkte werden von VAX behoben. Aber VAX ist nicht Visual Studio.

    Für mich ist die Autovervollständigung wichtig, da ich es häufig mit viel Code, auch von Fremden, zu tun habe. Der Debugger ist für mich hingegen häufig wenig hilfreich, da er meist nicht weit kommt (asynchrones Zeugs oder libs).

    Die Refactoringtools finde ich nicht sehr gelungen. Makros sind nützlich, aber die kann fast jede IDE auf ähnliche Art.

    Der Kram für die Teamarbeit mag gut sein, aber da müssen wir eine andere Lösung benutzen.

    wikipedia schrieb:

    Texteditor
    Compiler bzw. Interpreter
    Linker
    Debugger
    Quelltextformatierungsfunktion

    Da hat hat Compiler und der Linker nur mittelbar mit der IDE zu tun. Die gibts auch ohne.
    Formatierung und Texteditor sind, wie gesagt mäßig. Bleibt der Debugger, der tatsächlich ganz gut ist, bei meinen Problemen aber leider nicht hilfreich...

    Mal 2010 testen.



  • Tachyon schrieb:

    Klar es geht auch ohne, aber dann frage ich mich: Wozu eine IDE? Nur aufgrund des Debuggers? Ich denke nicht.

    Ehrlich gesagt, ist der MSVC Debugger so der Hauptgrund für mich VS als Hauptentwicklungsumgebung einzusetzen. Der Debugger ist für mich das wichtigste Tool in einer IDE. Code completion ist ne schöne Sache und ich hab mich über nicht funktionierende IntelliSense auch schon öfter mal geärgert, aber was besseres habe ich noch nicht gefunden (außer jetzt bei ersten Versuchen in VS2010). NetBeans und Eclipse vervollständigen meinen Code langsamer als ich schreiben kann. Aber nicht nur, dass diese IDEs mir in annehmbarer Zeit keine vernünftige Unterstützung bieten, sie verlangsamen meine Arbeit durch das ständige Hängen auch noch. Das führte dazu, dass ich den ganzen Kram erst abgeschaltet habe, und mich dann für Code::blocks entschieden habe, für den gcc unter Linux eine ganz nette IDE, aber für meine Ansprüche mit VS nicht zu vergleichen. Andere Leute haben vielleicht andere Ansprüche, aber Anwendungen bei denen ein Debugger nutzlos ist halte ich für Märchen.

    Wenn ich unter Windows mal ein paar Gehversuche in Java unter Eclipse gemacht habe, muss ich allerdings sagen, dass ich schon recht beeindruckt war. Vor allem auch als Anfänger hat man da ziemlich coole Features..


  • Administrator

    Tachyon schrieb:

    Dravere schrieb:

    ...

    Okay, halten wir mal fest: Circa 90% der Kritikpunkte werden von VAX behoben. Aber VAX ist nicht Visual Studio.

    VAX ist ein Plugin für Visual Studio. Wenn wir alle Plugins aus Eclipse entfernen würden ... lol ... dann hast du eine leere Hülle :p

    Tachyon schrieb:

    Der Debugger ist für mich hingegen häufig wenig hilfreich, da er meist nicht weit kommt (asynchrones Zeugs oder libs).

    Macht bei einem guten Debugger doch keinen Abbruch. Die Libs halt mit Debug-Symbols verwenden und man kann auch mehrere Threads anhalten und sie einzeln steuern. Das Analysieren von Live-Daten hilft einem bei der Problemsuche meistens sehr viel weiter und man muss nicht irgendwelche Debug-Ausgaben einbauen, um sie später wieder wegzunehmen. Also der Code bleibt, wie er ist.

    Aber um es mal auf den Punkt zu bringen, wenn du am Anfange gesagt hättest, dass Visual Studio 2008 eine eher mittelmässige oder womöglich sogar schlechte Autovervollständigung hat, dann hätte ich kaum was gesagt. Vielleicht höchstens: Kauf dir halt VAX! 😃
    Dass die Autovervollständigung in VS2008 nicht das Gelbe vom Ei ist, damit werden wohl viele einig sein. Aber deswegen zu behaupten, dass es keine IDE ist, halte ich für ein wenig masslos übertrieben. Visual Studio kann auch noch viel mehr, als was du bis jetzt aufgelistet hast. Es bietet zahlreiche Hilfsmittel in der Entwicklung von Programmen von A bis Z. Da weiss man gar nicht wo anfangen oder enden mit der Auflistung, aber hätte auch nicht einen all zu grossen Zweck. Ich will dich ja auch nicht bekehren oder sowas, nur dass du die unsinnige Aussage zurücknimmst: VS2008 sei keine IDE 😉

    Grüssli



  • Welche Aussage? 😉


Anmelden zum Antworten