vscode在docker内gdb调试core dump文件

在Linux系统中,若程序异常终止,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为叫做Core Dump(中文一般译为“核心转储”)。实际上,除内存信息之外,核心转储还会记录程序的一些关键运行状态,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息等。核心转储对于程序员调试程序非常有益,因为有些程序错误是很难重现的,例如指针异常,而核心转储文件可以重现程序出错时的情景。
但传统的gdb 调试有个问题是不够直观,工程师必须学习gdb命令且只能在命令行中调试。所幸的是由于这几年技术的发展,VsCode已经可以支持调试c++的功能了,用户可以VsCode中边看代码边调试程序(包括服务器程序、嵌入式arm板子上的程序、甚至是linux内核等)
传统gdb调试
gdb bin文件 core_dump文件
在这里插入图片描述

vscode gdb调试
image.png
使用 VSCode 调试 Linux 核心转储(core dump)涉及一些配置步骤。以下是使用 VSCode 进行核心转储调试的详细步骤。

1. 安装必要的工具

确保你已经安装了以下工具:

  • VSCode:安装适用于你的操作系统的版本。
  • C/C++ 插件:在 VSCode 中安装微软的 C/C++ 插件。
  • gdb:GNU 调试器,用于调试程序。
  • gdbserver(可选):如果需要远程调试。
  • docker插件
  • Remote Development插件或remote container插件
  • cmake插件

2. 生成核心转储

首先,你需要生成一个核心转储文件。为了让系统生成核心转储文件,确保以下设置已经配置:

bash ulimit -c unlimited  # 允许生成核心转储

运行导致程序崩溃的应用程序时,它将生成一个核心转储文件,通常命名为 corecore.<PID>
在我的Docker内部,使用命令:cat /proc/sys/kernel/core_pattern查看核心转储文件的生成位置及文件名格式,得到的结果为:/apollo/data/core/core_%e.%p,表明Docker内部的核心转储文件被保存在/apollo/data/core目录下,文件名格式:core_进程名.进程PID。

3.VSCode远程链接容器

打开VSCode,选中Docker图标,出现已启动的镜像,如图所示:
在这里插入图片描述
右键选中Apolloauto/apollo:dev-x86_64-xxx 镜像,选中Attach visual studio code。

4. 在 VSCode 中配置调试器

创建或打开一个现有的 VSCode 项目,并确保其目录包含可执行文件和核心转储文件。

  1. 打开 **launch.json** 文件:如果没有这个文件,可以通过 Ctrl+Shift+P 打开命令面板,输入 Debug: Open launch.json,并选择 C++ (GDB/LLDB) 作为调试配置。
  2. 配置调试设置:将 launch.json 文件配置为调试核心转储。一个典型的配置如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "GDB Debug Core Dump",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/your_executable",  // 你的可执行文件
            "coreDumpPath": "${workspaceFolder}/core",      // 核心转储文件路径
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath": "/usr/bin/gdb",  // gdb 的路径
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "stopAtEntry": false
        }
    ]
}
  • **program**: 设置为你的可执行文件的路径。
  • **coreDumpPath**: 设置为核心转储文件的路径。
  • **miDebuggerPath**: 指定 gdb 的路径,通常是 /usr/bin/gdb

5. 开始调试

  1. 启动调试:选择刚才配置的 GDB Debug Core Dump,点击 VSCode 的调试图标或按 F5 开始调试。
  2. 分析核心转储:现在可以在 VSCode 中使用断点、变量检查、调用堆栈和其他调试功能来分析核心转储文件。

6. 核心转储分析技巧

  • 查看调用堆栈:在调试过程中,查看调用堆栈以找出程序崩溃的位置。
  • 检查变量:在调试过程中检查关键变量的值以确定问题的根源。
  • 设置断点:在感兴趣的代码位置设置断点,逐步执行代码以深入理解问题。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值