zhangbuda7788 blog

Gdb_core_dump

Gdb_core_dump

GDB 调试

GDB中文手册

GDB调试死循环

GDB调试入门

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 栈帧


未完待续

#c/c++