3

在 vscode 中使用 gdb 跨平台远程调试 C/C++ 代码

 2 years ago
source link: https://blog.nanpuyue.com/2018/048.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

重新编译安装 gdb

要使用 gdb 跨平台远程调试,需要在编译 gdb 的时候开启相关的支持选项,简单的说在 configure 选项中加入 --enable-targets=all

archlinux 用户可以使用 asp 来获取 gdb 的 PKGBUILD,做如下修改:

build() {
  cd gdb-$pkgver
  
  ./configure --prefix=/usr --disable-nls \
    --enable-targets=all \
    --with-system-readline \
    --with-python=/usr/bin/python3 \
    --with-guile=guile-2.0 \
    --with-system-gdbinit=/etc/gdb/gdbinit
  make
}

然后运行 makepkg -si 编译安装,应该会报签名无法验证的错误,这时候需要我们先导入 PGP 公钥:

gpg --keyserver pgp.ustc.edu.cn  --recv-keys 92EDB04BFF325CF3

然后再运行 makepkg -si

配置 vscode

首先要安装微软官方提供的 C/C++ 扩展。

然后进入菜单 “调试”-> “添加配置”打开配置文件 launch.json,做如下配置:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Remote Launch",
            "type": "cppdbg",
            "request": "launch",
            "miDebuggerServerAddress": "192.168.1.101:2333",
            "program": "${workspaceFolder}/build-debug/program",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "sourceFileMap": {
                "/build": "/build"
            },
            "logging": {
                "engineLogging": false
            },
            "MIMode": "gdb",
        }
    ]
}

下面几个选项按自己的实际情况修改:

  • miDebuggerServerAddress 是远程机器的地址及 gdbserver 监听的端口
  • program 是本地的可执行文件路径
  • sourceFileMap 是本地路径与远程路径的映射关系

这里需要特别注意的是,由于 C/C++ 扩展本身的逻辑 bug,需要本地和远程机器上都有我们要调试的程序,并且架构保持一致。

如果我们的代码是在远程机器上编译的,可以将远程机器上编译好的二进制复制到本地机器上(虽然它并不会被执行),这一点与使用 CLion 不一样,CLion 做跨平台远程调试的时候是不需要本地有可执行文件的。

按照上面的说明配置好后,先在在远程机器上运行 gdbserver:

gdbserver :2333 /path/to/build-debug/program

然后在 vscode 调试界面单击“开始调试”按钮,即可开始调试,如果遇到报错可以修改配置中的 engineLogging 为 true 后再次尝试启动调试,这时可以在调试控制台看到更详细的日志输出,以便定位及解决问题。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK