Mac安装GDB

本文讲述在Mac上使用Homebrew安装GDB的过程。安装时遇到访问权限问题,通过chown获取/usr/local/Homebrew权限解决;又因提示Xcode版本低,重置Homebrew后安装成功。最后用GDB检查程序调试信息,若没有需编译时加 -g 选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mac安装GDB


今天在mac上想用gdb调试一个程序, 当我在shell中输入 gdb ./bin/kldserver 查看该程序是否有调试信息时,提示没有安装gdb:

ios:kldsvc shinson$ gdb ./bin/kldserver
-bash: gdb: command not found.

于是使用mac上的包管理工具Homebrew搜索一下gdb:

ios:kldsvc shinson$ brew search gdb
==> Searching local taps...
gdbm ✔          cgdb            gdb             i386-elf-gdb    pgdbf
==> Searching taps on GitHub...
homebrew/linuxbrew-core/gdb              homebrew/linuxbrew-core/i386-elf-gdb
==> Searching blacklisted, migrated and deleted formulae...

能搜索到,于是安装gdb,但报访问权限问题:

ios:kldsvc shinson$ brew install gdb
touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied
Updating Homebrew...

于是ctrl+c结束更新Homebrew,使用chown获取访问权限,本想直接获取/usr/local的权限,但mac很注重安全,获取失败,只能尝试获取/usr/local/Homebrew的权限,结果成功了:

ios:kldsvc shinson$ sudo chown -R $(whoami) /usr/local
chown: /usr/local: Operation not permitted
ios:kldsvc shinson$ sudo chown -R $(whoami) /usr/local/Homebrew/
ios:kldsvc shinson$ 

然后开心的重新尝试安装gdb,结果还自动更新了Homebrew,但提示我的Xcode版本太低:

ios:kldsvc shinson$ brew install gdb
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (caskroom/cask, ethereum/ethereum).
==> Updated Formulae
ethereum/ethereum/cpp-ethereum           ethereum/ethereum/solidity
ethereum/ethereum/ethereum

Error: Your Xcode (1) is too outdated.
Please update to Xcode 9.1 (or delete it).
Xcode can be updated from
  https://developer.apple.com/download/more/

吓得我赶紧查看一下Xcode的版本:

ios:kldsvc shinson$ xcodebuild -version
Xcode 10.1
Build version 10B61

结果我的Xcode版本是比较新的,所以只能重置一下Homebrew:

ios:kldsvc shinson$ brew update-reset
==> Fetching /usr/local/Homebrew...
remote: Enumerating objects: 6335, done.
remote: Counting objects: 100% (6335/6335), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 26201 (delta 6320), reused 6328 (delta 6316), pack-reused 19866
Receiving objects: 100% (26201/26201), 6.90 MiB | 33.00 KiB/s, done.
Resolving deltas: 100% (19627/19627), completed with 952 local objects.
From https://github.com/Homebrew/brew
   2225febfb..15495f0bd  master     -> origin/master
 * [new tag]             1.3.8      -> 1.3.8
 * [new tag]             1.3.9      -> 1.3.9
 * [new tag]             1.4.0      -> 1.4.0
 * [new tag]             1.4.1      -> 1.4.1
 * [new tag]             1.4.2      -> 1.4.2
 * [new tag]             1.4.3      -> 1.4.3
 * [new tag]             1.5.0      -> 1.5.0
 * [new tag]             1.5.1      -> 1.5.1
 * [new tag]             1.5.10     -> 1.5.10
 * [new tag]             1.5.11     -> 1.5.11
 * [new tag]             1.5.12     -> 1.5.12
 * [new tag]             1.5.13     -> 1.5.13
 * [new tag]             1.5.14     -> 1.5.14
 * [new tag]             1.5.2      -> 1.5.2
 * [new tag]             1.5.3      -> 1.5.3
 * [new tag]             1.5.4      -> 1.5.4
 * [new tag]             1.5.5      -> 1.5.5
 * [new tag]             1.5.6      -> 1.5.6
 * [new tag]             1.5.7      -> 1.5.7
 * [new tag]             1.5.8      -> 1.5.8
 * [new tag]             1.5.9      -> 1.5.9
 * [new tag]             1.6.0      -> 1.6.0
 * [new tag]             1.6.1      -> 1.6.1
 * [new tag]             1.6.10     -> 1.6.10
 * [new tag]             1.6.11     -> 1.6.11
 * [new tag]             1.6.12     -> 1.6.12
 * [new tag]             1.6.13     -> 1.6.13
 * [new tag]             1.6.14     -> 1.6.14
 * [new tag]             1.6.15     -> 1.6.15
 * [new tag]             1.6.16     -> 1.6.16
 * [new tag]             1.6.17     -> 1.6.17
 * [new tag]             1.6.2      -> 1.6.2
 * [new tag]             1.6.3      -> 1.6.3
 * [new tag]             1.6.4      -> 1.6.4
 * [new tag]             1.6.5      -> 1.6.5
 * [new tag]             1.6.6      -> 1.6.6
 * [new tag]             1.6.7      -> 1.6.7
 * [new tag]             1.6.8      -> 1.6.8
 * [new tag]             1.6.9      -> 1.6.9
 * [new tag]             1.7.0      -> 1.7.0
 * [new tag]             1.7.1      -> 1.7.1
 * [new tag]             1.7.2      -> 1.7.2
 * [new tag]             1.7.3      -> 1.7.3
 * [new tag]             1.7.4      -> 1.7.4
 * [new tag]             1.7.5      -> 1.7.5
 * [new tag]             1.7.6      -> 1.7.6
 * [new tag]             1.7.7      -> 1.7.7
 * [new tag]             1.8.0      -> 1.8.0
 * [new tag]             1.8.1      -> 1.8.1
 * [new tag]             1.8.2      -> 1.8.2
 * [new tag]             1.8.3      -> 1.8.3
 * [new tag]             1.8.4      -> 1.8.4
 * [new tag]             1.8.5      -> 1.8.5
 * [new tag]             1.8.6      -> 1.8.6
 * [new tag]             1.9.0      -> 1.9.0
 * [new tag]             1.9.1      -> 1.9.1
 * [new tag]             1.9.2      -> 1.9.2
 * [new tag]             1.9.3      -> 1.9.3
 * [new tag]             2.0.0      -> 2.0.0
 * [new tag]             2.0.1      -> 2.0.1
 * [new tag]             2.0.2      -> 2.0.2
 * [new tag]             2.0.3      -> 2.0.3
 * [new tag]             2.0.4      -> 2.0.4
 * [new tag]             2.0.5      -> 2.0.5

==> Resetting /usr/local/Homebrew...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Switched to and reset branch 'master'

==> Fetching /usr/local/Homebrew/Library/Taps/caskroom/homebrew-cask...

==> Resetting /usr/local/Homebrew/Library/Taps/caskroom/homebrew-cask...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/ethereum/homebrew-ethereum...

==> Resetting /usr/local/Homebrew/Library/Taps/ethereum/homebrew-ethereum...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core...
remote: Enumerating objects: 25954, done.
remote: Counting objects: 100% (25954/25954), done.
remote: Compressing objects: 100% (6926/6926), done.
remote: Total 24068 (delta 17841), reused 23324 (delta 17140), pack-reused 0
Receiving objects: 100% (24068/24068), 8.88 MiB | 32.00 KiB/s, done.
Resolving deltas: 100% (17841/17841), completed with 1874 local objects.
From https://github.com/Homebrew/homebrew-core
   9e6d6e17b..d7538ec53  master     -> origin/master

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core...
Checking out files: 100% (5010/5010), done.
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

Homebrew重置成功后,再次尝试安装gdb,终于安装成功了:

ios:kldsvc shinson$ brew install gdb
==> Downloading https://homebrew.bintray.com/bottles-portable-ruby/portable-ruby-2.3.7.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring portable-ruby-2.3.7.mavericks.bottle.tar.gz
==> Downloading https://homebrew.bintray.com/bottles/gdb-8.2.1.mojave.bottle.tar
######################################################################## 100.0%
==> Pouring gdb-8.2.1.mojave.bottle.tar.gz
==> Caveats
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  https://sourceware.org/gdb/wiki/BuildingOnDarwin

On 10.12 (Sierra) or later with SIP, you need to run this:

  echo "set startup-with-shell off" >> ~/.gdbinit
==> Summary
?  /usr/local/Cellar/gdb/8.2.1: 55 files, 26.9MB
==> `brew cleanup` has not been run in 30 days, running now...
Pruned 0 symbolic links and 6 directories from /usr/local
ios:kldsvc shinson$ 

查看一下gdb的版本:

ios:kldsvc shinson$ gdb -version
GNU gdb (GDB) 8.2.1
Copyright (C) 2018 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.

然后回到最开始的目的,检查程序是否有调试信息,-q 表示启动gdb时不显示那一长段包含版本、版权等提示信息。结果中的 (no debugging symbols found) 表示不包含调试信息,表示需要在编译程序时加上 -g 选项。最后输入 q回车 退出gdb:

ios:kldsvc shinson$ gdb ./bin/kdlserver
Reading symbols from ./write...(no debugging symbols found)...done.
(gdb) q
ios:kldsvc shinson$ 
### 如何在3588设备上安装 GDB 调试工具 要在3588设备或平台上成功安装并配置 GDB 调试工具,可以按照以下方法操作: #### 1. 安装依赖项 首先,在目标平台(如3588设备)上确保已安装必要的构建工具和库文件。可以通过包管理器完成此过程。如果使用的是基于 Debian 的 Linux 发行版,则可运行如下命令来安装所需的开发工具链: ```bash sudo apt-get update && sudo apt-get install build-essential texinfo libncurses-dev ``` 上述命令会下载编译 GDB 所需的基础组件以及支持调试功能的相关头文件和静态链接库[^1]。 #### 2. 下载源码包 访问 GNU 官方网站获取最新版本的 GDB 源代码压缩包或者通过 Git 版本控制系统拉取仓库中的内容: ```bash git clone https://sourceware.org/git/binutils-gdb.git cd binutils-gdb ``` #### 3. 配置与编译 进入解压后的目录之后执行 `configure` 脚本来初始化项目结构,并指定交叉编译选项以便适配特定硬件架构(假设这里的目标体系结构为 ARM Cortex-A 系列处理器)。接着利用 Make 工具生成最终二进制文件。 ```bash mkdir build && cd build ../configure --target=arm-linux-gnueabihf --prefix=/opt/cross-tools/arm-linux-gnueabihf/ make -j$(nproc) sudo make install ``` 注意:这里的路径 `/opt/cross-tools/...` 可以替换为你希望放置跨平台工具链的位置;同时 `-j$(nproc)` 参数表示并发作业数等于当前 CPU 核心数量,从而加速整个构建流程[^2]。 #### 4. 处理权限问题 (针对 macOS 或其他特殊操作系统) 对于某些特殊的主机环境像 Mac OS X 来说,可能还需要额外处理签名验证失败的问题。具体做法参照之前提到的方法——即先定位到实际 gdb 文件所在位置再对其进行重新签署认证动作: ```bash which arm-linux-gnueabihf-gdb codesign -fs your-cert-name $(which arm-linux-gnueabihf-gdb) ``` 其中 `your-cert-name` 应该替换成你自己创建的有效证书名。 #### 5. 测试远程调试连接 最后一步就是确认本地机器上的客户端能否正常连通远端服务器实例。假定已经部署好了一个监听于 IP 地址 `192.168.x.y` 和端口号 zzzz 上的服务进程,则只需简单键入下面这条指令即可发起握手请求尝试建立通信信道: ```bash /opt/cross-tools/bin/arm-linux-gnueabihf-gdb ./my_program (gdb) target remote 192.168.x.y:zzzz ``` 此时应该能够看到类似于这样的提示消息表明一切准备就绪等待进一步分析工作开展:“Remote debugging using ...”。 --- ### 注意事项 有时可能会遇到警告信息例如 “Can not parse XML syscalls information”,这通常是由于缺少 Python 解析模块造成的。解决办法很简单只需要再次回到 configure 步骤加上相应参数开启嵌套特性开关就可以了: ```bash ../configure --enable-python ... ``` 另外值得注意的一点是不同厂商生产的 SoC 往往存在细微差异因此最好查阅官方文档了解确切的技术规格后再做决定选用哪款预定义好的模板最为合适[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值