Linux debugger



  • Hallo!

    Ich hab jetz am angefangen, auch unter linux zu proggen. Ich hasse allerdings alle debugger die ich bisher gefunden hab. Als basis dient immer gdb... kA ob der gut is. Vielleicht bin ich auch von Vc2005 verwöhnt, weiß ich nich.
    Aber, ich vermisse die einfachen Funktion unter VC F10, F11, und Umsch+F11. Also ber ganze funktion springen, in funktion springen, aus funktion zurückkehren. Wenn ich diese funktionen in den debuggern unter suse10.0 versuche zu finden, springt er immer sonstwohin, Ich seh da überhaupt nicht durch. Bishher hjab ich ausprobiert:
    anjuta-Debugger, KDevelop-Debugger, KDGB, DDD und Insight, überall der gleiche mist. Tritt besonders auf, wenn man funktionen in der STL aufruft, zB map::find, wenn ich da mittels step, until, next oder sonstwas rübergehe, komme ich niemals an die nächste quellcodezeile.

    zB

    //...
    //Debugerzeile ist hier:
    it = m_Map.find(1);  // in VC drücke ich hier F10, und er geht direkt zur nächsten Zeile
    cout << *it << endl;
    

    Mit den debugger in linux geht das nich, er springt immer in irgendwleche stl-header und so. Ich seh da überhaupt nich mehr durch und damit kann ich kein größeres Programm dbuggen 😞
    Was könnt ihr mir für tipps geben? Welchen debugger kanni ch denn benutzen, der so wie is wie der in VC? Sonst macht das ganze keinen Spaß unter linux...

    Maxi



  • Natürlich springt der in die STL-Funktionen, da diese ja inline sind. Ich weiß nicht ob der GDB irgend welche Funktionsausschlusslisten hat, mit dem du ihm sagen kannst, dass er eben einige Funktionen nicht anspringen soll. Aber ansonsten ist es normal, da er ja nur sieht "hier wird eine Funktion X aufgerufen und der Quellcode liegt dazu im Header Y".



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • rüdiger schrieb:

    Natürlich springt der in die STL-Funktionen, da diese ja inline sind. Ich weiß nicht ob der GDB irgend welche Funktionsausschlusslisten hat, mit dem du ihm sagen kannst, dass er eben einige Funktionen nicht anspringen soll. Aber ansonsten ist es normal, da er ja nur sieht "hier wird eine Funktion X aufgerufen und der Quellcode liegt dazu im Header Y".

    Es geht imho eher darum, über eine Funktion drüberzuspringen. Er kommt also in die Zeile "it = m_Map.find(i)" drückt eine Taste und m_Map.find(i) wird ausgeführt ohne expplizit in die Methode zu springen. Alias: Er befindet sich ohne anderen Code zu sehen direkt in der nächsten Zeile und kann sich ansehen welchen Wert "it" hat.

    MfG SideWinder



  • SideWinder schrieb:

    rüdiger schrieb:

    Natürlich springt der in die STL-Funktionen, da diese ja inline sind. Ich weiß nicht ob der GDB irgend welche Funktionsausschlusslisten hat, mit dem du ihm sagen kannst, dass er eben einige Funktionen nicht anspringen soll. Aber ansonsten ist es normal, da er ja nur sieht "hier wird eine Funktion X aufgerufen und der Quellcode liegt dazu im Header Y".

    Es geht imho eher darum, über eine Funktion drüberzuspringen. Er kommt also in die Zeile "it = m_Map.find(i)" drückt eine Taste und m_Map.find(i) wird ausgeführt ohne expplizit in die Methode zu springen. Alias: Er befindet sich ohne anderen Code zu sehen direkt in der nächsten Zeile und kann sich ansehen welchen Wert "it" hat.

    Solche Funktionen gibt es aber im GDB.



  • Dann wäre es eventuell ganz praktisch wenn du die ihm mitteilst?!

    MfG SideWinder



  • SideWinder schrieb:

    Dann wäre es eventuell ganz praktisch wenn du die ihm mitteilst?!

    So direkt kenn ich nur finish, um an das Ende einer Funktion zu springen. Aber in den Frontends sollte es dazu ja Knöpfchen geben.



  • s oder step um in die nächste funktion reinzugehen
    n oder next um über die nächste funktion hinwegzugehen



  • aaalso... ich habs nochmal versucht, mit ganz einfachen programmen, kompüiliert mittels anujuta-script, ging nich, is total verrückt rumgesprungen. dannvon Kommandozeile kompiliert, da ging alles wie ich es auch von VC kenne. Problem ist der compilerschalter -O2, damit geht das debuggen nat+ürlich nicht. Also jetzt gehts einigermaßen.

    Nur, wie teile ich Anjuta mit, dass ich den Compilerschalter O2 nicht haben will? Jetzt muss ich immer in der config.status das Flag explizit rausnehmen und config.status ausführen. Muss doch auchin Anjuta gehen, oder?

    Aso, und gibts irgendwie plugins odre sowas, mit denen man auch container-inhalte anzeigen kann, wie zB von std::vector? Mit vc kann man sich direkt den Inhalt anzeigen lassen im debugger, ungemein prkatisch. Und mit std::string geht das auch, da steht direkt dahinter, was für ein text gepsichert wrid, in gdb muss man sich immer erst durch ellenlange pointer-ketten klicken, um std:.string-inhalt zusehen. bei std::vetor geht das überhaupt nich. gibts da was?



  • Von Anjuta habe ich keine Ahnung. Im Zweifelsfall musst du eben ins Handbuch schauen.

    Generisch funktionieren die meisten IDEs aber so, dass du unter Projekt-Einstellungen (oft im Menü Projekt) entsprechende Einstellungen zu Compiler-Flags uä vornehmen kannst 🙄



  • also, da anjuta mittels ./configure usw. arbeitet muss man bei configure explizit CFLAGS=-g setzen, anders gehts nich.
    Trotzdem bin ich noch dran rauszufinden, wie man std::vector und std::string so schön wie in vc mit dem debugger untersuchen kann. Hat jemand einen tipp? std::string kann man als Ausdruck überwachen mit string.c_str(); aber das is auch nich grad toll



  • Wenn du es weißt, teil es mir bitte mit.


Log in to reply