• chevron_right

      Debugger - backtrace

      pubsub.movim.eu / devlug • 30 November 2025

    Wir nehmen als Beispiel folgendes Programm.

    #include <stdio.h>
    #include <stdlib.h>
    
    int f(int n) {
      if (n == 0)
        return 1;
      return n * f(n - 1);
    }
    
    int main(int argc, char *argv[]) {
      if (argc < 2) {
        return EXIT_FAILURE;
      }
      int n = atoi(argv[1]);
      printf("f(%d) = %d\n", n, f(n));
      return EXIT_SUCCESS;
    }
    

    Kompiliert wird es wieder mit der -g-Option.

    gcc -g -o demo1 demo1.c
    

    Wir starten das Programm im Debugger gdb --args ./demo 8 und setzen direkt ein break auf die f-Funktion.

    (gdb) break f
    Breakpoint 1 at 0x1154: file demo1.c, line 5.
    

    Lässt man das Programm eine paar Schritte laufen, kommt folgendes raus:

    (gdb) bt
    #0  f (n=3) at demo1.c:7
    #1  0x000055555555516e in f (n=4) at demo1.c:7
    #2  0x000055555555516e in f (n=5) at demo1.c:7
    #3  0x000055555555516e in f (n=6) at demo1.c:7
    #4  0x000055555555516e in f (n=7) at demo1.c:7
    #5  0x000055555555516e in f (n=8) at demo1.c:7
    #6  0x00005555555551b0 in main (argc=2, argv=0x7fffffffe1d8) at demo1.c:15
    
    • chevron_right

      Debugger - backtrace

      pubsub.movim.eu / devlug • 30 November 2025

    Wir nehmen als Beispiel folgendes Programm.

    #include <stdio.h>
    #include <stdlib.h>
    
    int f(int n) {
      if (n == 0)
        return 1;
      return n * f(n - 1);
    }
    
    int main(int argc, char *argv[]) {
      if (argc < 2) {
        return EXIT_FAILURE;
      }
      int n = atoi(argv[1]);
      printf("f(%d) = %d\n", n, f(n));
      return EXIT_SUCCESS;
    }
    

    Kompiliert wird es wieder mit der -g-Option.

    gcc -g -o demo1 demo1.c
    

    Wir starten das Programm im Debugger gdb --args ./demo 8 und setzen direkt ein break auf die f-Funktion.

    (gdb) break f
    Breakpoint 1 at 0x1154: file demo1.c, line 5.
    

    Lässt man das Programm eine paar Schritte laufen, kommt folgendes raus:

    (gdb) bt
    #0  f (n=3) at demo1.c:7
    #1  0x000055555555516e in f (n=4) at demo1.c:7
    #2  0x000055555555516e in f (n=5) at demo1.c:7
    #3  0x000055555555516e in f (n=6) at demo1.c:7
    #4  0x000055555555516e in f (n=7) at demo1.c:7
    #5  0x000055555555516e in f (n=8) at demo1.c:7
    #6  0x00005555555551b0 in main (argc=2, argv=0x7fffffffe1d8) at demo1.c:15
    
    • chevron_right

      Debugger - backtrace

      pubsub.movim.eu / devlug • 30 November 2025

    Wir nehmen als Beispiel folgendes Programm.

    #include <stdio.h>
    #include <stdlib.h>
    
    int f(int n) {
      if (n == 0)
        return 1;
      return n * f(n - 1);
    }
    
    int main(int argc, char *argv[]) {
      if (argc < 2) {
        return EXIT_FAILURE;
      }
      int n = atoi(argv[1]);
      printf("f(%d) = %d\n", n, f(n));
      return EXIT_SUCCESS;
    }
    

    Kompiliert wird es wieder mit der -g-Option.

    gcc -g -o demo1 demo1.c
    

    Wir starten das Programm im Debugger gdb --args ./demo 8 und setzen direkt ein break auf die f-Funktion.

    (gdb) break f
    Breakpoint 1 at 0x1154: file demo1.c, line 5.
    

    Lässt man das Programm eine paar Schritte laufen, kommt folgendes raus:

    (gdb) bt
    #0  f (n=3) at demo1.c:7
    #1  0x000055555555516e in f (n=4) at demo1.c:7
    #2  0x000055555555516e in f (n=5) at demo1.c:7
    #3  0x000055555555516e in f (n=6) at demo1.c:7
    #4  0x000055555555516e in f (n=7) at demo1.c:7
    #5  0x000055555555516e in f (n=8) at demo1.c:7
    #6  0x00005555555551b0 in main (argc=2, argv=0x7fffffffe1d8) at demo1.c:15