直接打印堆栈调试信息
想要掌握如何在Linux环境下直接打印堆栈调试信息并找到错误代码行号吗?本文将通过一个简单的示例来详细讲解这一过程。
首先,我们来看测试代码:
#include <stdio.h>
#include <signal.h>
//信号钩子函数,获取栈信息,然后打印
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 命令找到错误代码的具体行号。
以上就是【Linux】直接打印堆栈调试信息的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号