直接打印堆栈调试信息
想要掌握如何在Linux环境下直接打印堆栈调试信息并找到错误代码行号吗?本文将通过一个简单的示例来详细讲解这一过程。
首先,我们来看测试代码:
#include#include //信号钩子函数,获取栈信息,然后打印 void handle_segv(int signum) { void *array[100]; size_t size; char **strings; size_t i; signal(signum, SIG_DFL); size = backtrace(array, 100); strings = (char**)backtrace_symbols(array, size); fprintf(stderr, "Launcher received SIG:%d Stack trace:\n", signum); for (i = 0; i < size; i++) { fprintf(stderr, "%s\n", strings[i]); } free(strings); } int main() { int *p = NULL; *p = 1; return 0; }
接下来是编译步骤:
gcc -g demo.c -o demo
运行程序后,我们可以看到如下输出:

找到错误代码行号: 使用 addr2line 命令
我们以示例来展示如何使用 addr2line 命令:
addr2line -a 0x4007b6 -e demo
运行上述命令后,我们可以得到如下的结果:

然后,我们回到源文件,找到对应的位置:

通过以上步骤,我们就能成功地在Linux环境下直接打印堆栈调试信息,并使用 addr2line 命令找到错误代码的具体行号。









