GDB指的是 The GNU Project Debugger,是 GNU 开源组织开发的一个程序调试工具。
在 Mac OSX 中使用 GDB,遇到了一些困难,文本来记录一下。
1. 安装 gdb
$ brew install gdb
2. 编写C程序
hello.c
#include <stdio.h>
int main()
{
printf("Hello\n");
}
3. 使用gcc编译
$ gcc -g hello.c -o hello
注:要使用gdb
调试,需要传入-g
参数。
4. 运行一下
$ ./hello
Hello
5. 使用gdb调试
$ gdb ./hello
GNU gdb (GDB) 8.3
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin16.7.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from hello...
Reading symbols from /Users/.../hello.dSYM/Contents/Resources/DWARF/hello...
(gdb)
光标停留在 (gdb)
后面了,等待输入调试命令。
6. 在OSX不能调试
(gdb) run
Starting program: /.../hello
Unable to find Mach task port for process-id 23330: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
7. 解决方法
7.1 应用程序中搜索:钥匙串
7.2 创建证书
菜单 - 钥匙串访问 - 证书助理 - 创建证书
名称:gdb-cert
身份类型:自签名根证书
证书类型:代码签名
勾选:让我覆盖这些默认值
然后一直点“继续”,点到最后一步。
选择,钥匙串:系统
7.3 配置证书
再回到钥匙串访问页面,右上角搜索:gdb-cert
找到种类为证书
的钥匙串,右键显示简介
。
选择,使用此证书:始终信任
。
7.4 命令行授权
$ codesign -s gdb-cert /usr/local/bin/gdb
其中,gdb-cert
为刚才创建的钥匙串名字,/usr/local/bin/gdb
为gdb
的安装路径。
7.5 重启电脑
重启
8. 重新使用gdb调试
$ gdb ./hello
...
(gdb) run
Starting program: /Users/.../hello
[New Thread 0x1103 of process 4375]
[New Thread 0x1403 of process 4375]
[New Thread 0x1503 of process 4375]
Hello
[Inferior 1 (process 4375) exited normally]
参考
GDB
The GNU Project Debugger(GDB): Short Tutorial with Examples