打开文件 ~/.config/apport/settings
修改为
[main]unpackaged=true
进入 /var/crash文件夹,可以看到很多后缀为 .crash的文件。
apport-unpack [crash文件路径] [解压路径]
下面示范一下程序崩溃以后如何 debug
在 /tmp/hello中创建一个文件
int cal() {return 1/0;}int main() {cal();}
# 编译代码gcc -o main -g main.cc# 执行代码, 产生coredump文件./main
进入 /var/crash文件夹。如果你的文件是在 /tmp/hello文件夹中运行的,那么生成的文件名称就为 _tmp_hello_main.1000.crash
# 把文件解压到 /tmp/hello/crash 文件夹apport-unpack ./_tmp_hello_main.1000.crash /tmp/hello/crash

现在我们用 gcc 分析这个 coredump
cd /tmp/hellogdb ./main ./crash/CoreDump
gdb 启动以后,很多人会不知所措,简单介绍一下如何使用 gdb
gdb 启动以后,输入 tui enable 打开 GDB 的命令行界面。
# 查看发生错误的调用栈bt# 选择最近的栈帧frame 0# 查看寄存器layout regs# 查看窗口列表info win# 聚焦到源码窗口focus src
如果你觉得tui对你来说还是太晦涩,现在 vscode 也可以调用 gdb
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/main", // 设置程序路径
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"coreDumpPath": "${workspaceFolder}/crash/CoreDump" // 设置 coredump 路径
}
]
}

在 Debug Console 里输入 -exec [gdb command]也可以执行gdb指令。
# 查看寄存器
-exec info registers
