Ubuntu :: CodeBlocks autovervollständigung & valgrind



  • Hallo Leute,

    ich bentzte seit kurzem unter Ubuntu CodeBlocks und habe 2 Probleme, die für die meisten von Euch wohl Trivial sind aber mich um den Verstand bringen.

    1. Die Autovervollständigung:
      - Ist ja ne tolle Sache, nur wie geht´s da nach der vervollständigung "weiter"?
      => Ich tippe zum beispiel fgets => das kennt er und macht gleich die klammern auf:
    fgets( )
    ......^- hier ist der Curser
    
    fgets(bla, 10, stdin)
                       ^ ^
                       | |--Aber hier will ich hin zum ; machen
                       |-Hier ist der Cursor
    

    Ich hoffe das ist verständlich. Was muss ich drücken oder wie muss ich das machen das er nach die Klammer springt. So muss ich immer mit der PfeilnachRechts Taste hin . Das ist a) voll nervig und b) nicht im Sinne glaub ich.

    Was für Tastenkombinationen sind noch "wichtig" für die Autoverfollständigung?
    Vernünftiges Handbuch auf Deutsch hab ich nicht gefunden.

    2.) Wie funktioniert die Prüfung mit Valgrind?
    Ich habe zum Beispiel:

    char *s1; 
    s1=malloc(1000);
    bla bla
    ENDE
    

    s1 wird nicht freigegeben. Valgrind läuft und läuft und läuft bei mir , bringt aber kein Ergebnis. Sollte es das nicht "kennen"?



  • beginner88888 schrieb:

    Was muss ich drücken oder wie muss ich das machen das er nach die Klammer springt.

    Ctrl-E vielleicht? (Sorry, nur geraten, bin selbst kein Codeblocks-User.)

    2.) Wie funktioniert die Prüfung mit Valgrind?
    Ich habe zum Beispiel:

    char *s1; 
    s1=malloc(1000);
    bla bla
    ENDE
    

    s1 wird nicht freigegeben. Valgrind läuft und läuft und läuft bei mir , bringt aber kein Ergebnis. Sollte es das nicht "kennen"?

    Doch, meines tut das auch:

    /tmp % cat foo.c
    #include <malloc.h>
    #include <stdio.h>
    
    int main() {
        char *s1;
        s1=malloc(1000);
        printf("Hello world\n");
        return 0;
    }
    /tmp % gcc -o foo foo.c                
    /tmp % valgrind --leak-check=full ./foo
    ==7076== Memcheck, a memory error detector
    ==7076== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
    ==7076== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
    ==7076== Command: ./foo
    ==7076== 
    Hello world
    ==7076== 
    ==7076== HEAP SUMMARY:
    ==7076==     in use at exit: 1,000 bytes in 1 blocks
    ==7076==   total heap usage: 1 allocs, 0 frees, 1,000 bytes allocated
    ==7076== 
    ==7076== 1,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==7076==    at 0x4C28BED: malloc (vg_replace_malloc.c:263)
    ==7076==    by 0x40055D: main (in /tmp/foo)
    ==7076== 
    ==7076== LEAK SUMMARY:
    ==7076==    definitely lost: 1,000 bytes in 1 blocks
    ==7076==    indirectly lost: 0 bytes in 0 blocks
    ==7076==      possibly lost: 0 bytes in 0 blocks
    ==7076==    still reachable: 0 bytes in 0 blocks
    ==7076==         suppressed: 0 bytes in 0 blocks
    ==7076== 
    ==7076== For counts of detected and suppressed errors, rerun with: -v
    ==7076== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 4 from 4)
    


  • Tja.. ich würd evtl. auch was anderes als Code::Blocks hernehmen aber irgendwie läuft bei meinem Ubuntu nur Code::Blocks. Andere IDE`s funktionieren nicht.
    Zumindest nicht seit ich 13.04 drauf habe...
    Glaub ich mach mal nochmal platt. Was nehmt ihr hauptsächlich her??



  • vim 🙂 eclipse bla ...



  • Leute ich werd wahnsinnig...
    Muss auf Arbeit DevC++ benutzen. Hab jetzt die neue Version 5.x irgendwas..

    Autovervollständigung .. das gleiche Problem wie bei Code Blocks...

    Bitte um Hilfe!!!

    Wie geht´s da nach der vervollständigung "weiter", bzw wenn die Klammern von alleine gesetzt werden puts()...

    => Ich tippe zum beispiel fgets => das kennt er und macht gleich die klammern auf:

    fgets( ) 
    ......^- hier ist der Curser
    
    fgets(bla, 10, stdin) 
                       ^ ^ 
                       | |--Aber hier will ich hin zum ; machen 
                       |-Hier ist der Cursor
    

    Ich hoffe das ist verständlich. Was muss ich drücken oder wie muss ich das machen das er nach die Klammer springt. So muss ich immer mit der PfeilnachRechts Taste hin . Das ist a) voll nervig und b) nicht im Sinne glaub ich.



  • Bei CodeBlocks : Ctrl+Enter kann man unter Shortcuts ändern.
    Bei DevC++ : nichts gefunden. Ausgeschalten



  • Ganz einfach: du tippst die Klammer nochmal, denn so ist das vorgesehen.
    Vielleicht lässt du dich etwas zu leicht aus dem Konzept bringen.



  • Ganz einfach: du tippst die Klammer nochmal, denn so ist das vorgesehen.
    Vielleicht lässt du dich etwas zu leicht aus dem Konzept bringen.

    Ähmmmm...Nö. Wenn ich die Klammer nochmal tippe , habe ich 2 Klammern am Schluß.
    =>puts("blabla")) . Nix für ungut, aber wenn das funktionieren würde , dann hätte ich diesen Thread nicht eröffnet.



  • beginner_offl schrieb:

    Ähmmmm...Nö. Wenn ich die Klammer nochmal tippe , habe ich 2 Klammern am Schluß.
    =>puts("blabla")) . Nix für ungut, aber wenn das funktionieren würde , dann hätte ich diesen Thread nicht eröffnet.

    Das dürfte dann ein Bug sein. Falls du ein stable release verwendest, solltest du ihn melden, wenn nicht, solltest du auf einen aktuellen nightly build upgraden (bzw. letzteres solltest du wahrscheinlich so oder so tun). Ich kann mich erinnern, dass die Klammervervollständigung mal vorübergehend in irgendeinem Build kaputt war, wurde aber bald danach behoben.

    Vielleicht ist auch nur ein Plugin nicht richtig geladen? IIRC ist SmartIdentCpp für Klammervervollständigung zuständig.



  • Nö, ich glaub ich hab da was verwurstelt.
    Also das mit der Codevervollständiung habe ich nicht mehr getestet, aber nachdem Valgrind weder auf Kubuntu noch auf Fedora funktionieren , gehe ich davon aus, das ich beim installieren etwas falsch mache.

    Ich habe erst CodeBlocks, dann die Nightly Builds( obs nicht da schon happert) raufgetan.... Plugin Valgrind erscheint in Codeblocks aber beim Ausführen läuft und läuft und läuft es...

    Kann mir evtl. mit der Installation jmd. helfen, bzw. schreiben wie Ihr vorgeht?
    Kann ich alles was ich installiert habe wieder "runterwerfen"? Bin jetzt nicht sooo der Linux Fuchs, yum install bla bla und apt-get install bla bla hat mit bis jetzt meistens greicht...



  • Also, der Reihe nach:

    1. erstmal sicherstellen, dass valgrind installiert ist.

    2. besser valgrind im Terminal benutzen, das C::B-Plugin taugt nichts, auch wenn es funktioniert (Ausgabe schlecht lesbar, GUI friert während dem Durchlauf ein, ja hallo?)

    3. beachte, dass valgrind dein Programm um etwa Faktor 30 verlangsamt. Ist bei deinem einen malloc natürlich egal, aber wenn das Programm ordentlich was zusammenrechnet, dauert's eben länger.

    4. Code::Blocks deinstallieren geht mit:
      `apt-get remove codeblocks

    apt-get autoremove`
    k.A. wie du deine nightly builds installiert hast, evtl. musst du da noch selbst Hand anlegen, um alle Reste zu entfernen.

    1. aktuelle nightlies installieren geht mit diesen Zeilen (aber erst alles restlos deinstallieren!), mal frei aus meinem Ubuntu-Einrichtungsskript entnommen:
      `add-apt-repository "deb http://apt.jenslody.de/testing testing main"

    apt-get update

    apt-get -y --force-yes install jens-lody-debian-keyring

    apt-get update

    apt-get -y install codeblocks-contrib`

    Aber Achtung, das ist ein Repository für Debian unstable. Es scheint derzeit kompatibel mit Ubuntu 13.10 zu sein - da das aber morgen schon wieder anders aussehen kann, entfernst du das Repository am besten nach dem Update wieder, damit sich C::B nicht früher oder später kaputtaktualisiert.

    1. Sicherheitshalber den .codeblocks-Ordner in home löschen, falls etwas mit der Konfiguration nicht stimmt.


  • Also erstmal VIELEN VIELEN DANK, sowas in die Richtung hab ich gesucht.

    Jetzt hab ich aber scheinbar noch ein anderes Problem.... Vielleicht kannst mir da auch noch helfen?

    Ich hab bis jetzt erhlich gesagt wenn ich unter Linux was programmmiert hab, immer aus der IDE heraus gestartet.
    Jetzt bin ich etwas überfordert.
    Mein Testprogramm heißt Val_Test... Ich hab jetzt in meinem von Codeblocks erstellten Projekt ordner meherere Unterordnuer usw usw. Bin debug release...
    Wie kann ich "manuell" in der Konsole starten, bzw. dann mit Valgrind prüfen?

    Erst habe ich versucht im ordner debug, wo eine datei namens Val_Test liegt :
    valgrind -tool=memcheck Val_Test => geht nicht.
    Dann wollte ich mal nur das Programm starten... aber wenn ich in der Console Val_Test eintiptte tut sich gar nichts....
    Oh Oh Oh... glaub ich brauch ne QuickInfo für Linux...



  • Ok , also Programm ausführen und so läuft jetzt.
    Aber mit Valgrind aus der Console prüfen klappt immer noch nicht.
    Muss ich die Datei aus dem Debug Ordner oder aus dem Release Ordner ausführen?

    Die Syntax hab ich aus dem Internet, aber es klappt mit :
    valgrind --leak-check=yes myprog

    Leider nicht.

    Auch kann ich myprog nur mit ./myprog starten....



  • beginner_offl schrieb:

    Auch kann ich myprog nur mit ./myprog starten....

    Das ist sicherheitstechnisch so gewollt. Du kannst Programme in der Form "myprog" nur dann starten, wenn sie im PATH liegen (also z.B. /usr/bin).

    beginner_offl schrieb:

    Muss ich die Datei aus dem Debug Ordner oder aus dem Release Ordner ausführen?

    Beim Debuggen immer den Debug-Build. Prinzipiell kannst du valgrind auch auf Release-Builds loslassen, aber das wird dir nur sagen, ob es Probleme gibt, nicht aber wo diese liegen, da Funktionsnamen und Zeilennummern fehlen.

    Du musst der regulären Kommandozeile nur ein "valgrind" voranstellen (mit --leak-check=yes, falls du neben Speicherzugriffsfehlern auch Memoryleaks aufspüren willst):
    valgrind --leak-check=yes ./myprog



  • Um es mit den Worten meiner US Freunde zu sagen... "THANK YOU SOOOOO MUCH!!!".
    Danke, werd das morgen gleich mal versuchen.


Log in to reply