diff options
Diffstat (limited to 'REORG.TODO/manual/examples/execinfo.c')
-rw-r--r-- | REORG.TODO/manual/examples/execinfo.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/REORG.TODO/manual/examples/execinfo.c b/REORG.TODO/manual/examples/execinfo.c new file mode 100644 index 0000000000..c357fa48ed --- /dev/null +++ b/REORG.TODO/manual/examples/execinfo.c @@ -0,0 +1,54 @@ +/* Obtain a backtrace and print it. + Copyright (C) 1991-2017 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, if not, see <http://www.gnu.org/licenses/>. +*/ + +#include <execinfo.h> +#include <stdio.h> +#include <stdlib.h> + +/* Obtain a backtrace and print it to @code{stdout}. */ +void +print_trace (void) +{ + void *array[10]; + size_t size; + char **strings; + size_t i; + + size = backtrace (array, 10); + strings = backtrace_symbols (array, size); + + printf ("Obtained %zd stack frames.\n", size); + + for (i = 0; i < size; i++) + printf ("%s\n", strings[i]); + + free (strings); +} + +/* A dummy function to make the backtrace more interesting. */ +void +dummy_function (void) +{ + print_trace (); +} + +int +main (void) +{ + dummy_function (); + return 0; +} |