Skip to Content

Mac OSX Vscode GDB 调试环境搭建

Posted on 2 mins read

gdb

在 Mac OSX 使用 GDB 配合 Vscode 来开发简直是强强联合,不能赞更多。 通过常规的 brew install gdb 安装最新的 GDB,编译一个简单的测试文件 start.c 来进行测试:

gcc -g start.c -o start
gdb start

运行 gdb 命令进入 GDB交互界面,运行 r 指令启动一个 GDB debug session

(gdb) r
Starting program: /Users/idevz/code/clang/start
Unable to find Mach task port for process-id 627: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
报错分析

找不到 Mach Task 进程 ID,来自 OSX 内核的错误,需要检查 gdb 的 codesigned,Mach 是苹果从 NeXTSTEP 带来的微内核,是 OSX 和 IOS 的核心。 从报错来看,应该是由于新安装的 GDB 没有进行 codesigned 签名认证,没有权限开启 Debug。所以我们需要给 GDB 程序添加 codesigned 签名认证。 详细的了解可以参考苹果的开发手册,如下。

Mach

taskgated

签名创建

1.打开 Mac 钥匙串访问,在菜单中如下点击 create-a-certificate

Creat a  certificate

2.在窗口,下拉点选 code signing(代码签名)

code signing

3.一路下一步,直到创建成功后,在签名列表找到刚刚创建的签名,查看详情(getinfo),将信任选项设置为永远信任

always-trust

对 gdb 执行程序设置 codesign

执行以下命令即可,如果认证不成功需要重复操作,可以添加上 -f 参数。

codesign -s gdb_codesign /usr/local/bin/gdb

下面是一些常用的参数:

codesign --remove-signature /usr/local/bin/gdb 		# 删除签名
codesign -vv -d /usr/local/bin/gdb            		# 查看
codesign -f  -s gdb_codesign /usr/local/bin/gdb 	# -f
security find-identity -v -p codesigning 			# 查看 codesigning 操作是否成功

重启 taskgated

sudo killall taskgated

至此,GDB 签名就ok了,下面开始使用,如果遇到下面的错。

 (gdb) r
Starting program: /Users/idevz/code/clang/start
During startup program terminated with signal ?, Unknown signal.

则需要对 gdb 设置 set startup-with-shell off, 推荐将此配置加入 init 文件,一劳永逸

echo "set startup-with-shell off">~/.gdbinit
然后就可以在 Vscode 里面设置 GDB 调试了
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "start",
            "type": "gdb",
            "request": "launch",
            "target": "./start",
            "cwd": "${workspaceRoot}"
        }
    ]
}
comments powered by Disqus