• [^] # Et la pile ?

    Posté par . En réponse au message comment trouver l'origine d'un segmentation fault ?. Évalué à 2.

    Eh les gars, je n'ai vu encore personne faire état de la pile !

    Comme dit plus haut, on inclue les symboles de debuggage en compilant avec "-g", on lance gdb ./testwin, on fait run et on attend le segfault.

    crashme.c

    int main (void)
    {
    char * ptr =0;
    * ptr = '-';

    return 0;
    }

    $ gcc -g crashme.c -o crashme
    $ gdb crashme
    (gdb) run
    Program received signal SIGSEGV, Segmentation fault.
    0x08048346 in main () at crashme.c:5
    5 * ptr = '-';


    Et quand on veut savoir d'où on vient, on explore la pile avec un backtrace :
    (gdb) bt
    #0 0x08048346 in main () at crashme.c:5
    #1 0x40043c57 in __libc_start_main () from /lib/i686/libc.so.6


    Après il existe "b" pour placer un breakpoint, "s" (step) pour avancer d'une instruction, "n" (next) pour sortir de la fonction en cours, etc. et surtout "help".


    Enfin un conseil : Lâche KDevelop un moment ou l'on va croire que tu es perdu sans Visual Studios. Habitues-toi un moment à la ligne de commande, et reviens-y - si tu y tiens encore - quand tu seras devenu un guru ! :-)