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 `gdb 栈帧
未完待续