Gdb_core_dump
This is a page about »Gdb_core_dump«.
Gdb_core_dump
GDB 调试
gdb core dump 调试
cat segfault.cpp
#include <stdio.h>
#include <stdlib.h>
void cause_segfault(){
int *p = NULL;
*p = 42;
// int *p = (int*)malloc(sizeof(int));
// if(p == NULL){
// exit(1);
// }
// *p = 42;
// printf("the *p is %d", *p);
}
int main(){
cause_segfault();
return 0;
}
编译 g++ -g segfault.cpp -o segfault
# 查看 core dump 文件 存储路径
cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e
# 修改存储路径
sudo sysctl -w kernel.core_pattern=/tmp/core.%e.%p.%h.%t
kernel.core_pattern = /tmp/core.%e.%p.%h.%t
# 查看 core dump 文件
ls /tmp
core.segfault.3540311.localhost.localdomain.1716920116
# gdb 调试
gdb ./segfault /tmp/core.segfault.3540311.localhost.localdomain.1716920116
# 接着,会出在 运行至报错的地方报出相应的错误
# 查看 调用栈
(gdb) bt
#0 0x0000000000400566 in cause_segfault () at segfault.cpp:6
#1 0x0000000000400578 in main () at segfault.cpp:17
# 调用栈帧
(gdb) frame 0
#0 0x0000000000400566 in cause_segfault () at segfault.cpp:5
5 *p = 42;
# 查看本地信息
(gdb) info locals
p = 0x0
# 打印 p 指针
(gdb) p p
$1 = (int *) 0x0
# 打印 p指针解引用
(gdb) p *p
Cannot access memory at address 0x0
未完待续