张不大的博客

Gdb_core_dump

This is a page about »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++