gdb 不适用于 macos High Sierra 10.13.3

Posted

技术标签:

【中文标题】gdb 不适用于 macos High Sierra 10.13.3【英文标题】:gdb doesn't work on macos High Sierra 10.13.3 【发布时间】:2018-08-06 15:59:46 【问题描述】:

我已经用 brew 安装了 gdb 8.1。

我也有 codesign gdb 和 .gdbinit 如下:

set startup-with-shell off.

我已禁用 SIP 功能:

$ csrutil status
System Integrity Protection status: disabled.

但是gdb还是不行:

#include <iostream>
using namespace std;

int main() 
  cout << "hello world!" << endl;
  return 0;

编译命令:

g++ -g test.cpp

gdb 输出:

GNU gdb (GDB) 8.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.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin17.3.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 a.out...Reading symbols from /Users/mypc/Downloads/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) run
Starting program: /Users/mypc/Downloads/a.out 
[New Thread 0x2503 of process 802]
[New Thread 0x2303 of process 802]
During startup program terminated with signal ?, Unknown signal.
(gdb) 

让 gdb 在 macos sierra 上工作的正确步骤是什么?

【问题讨论】:

似乎 gdb 在 macos 上已损坏,请参阅 github.com/Homebrew/homebrew-core/issues/5912 和 sourceware.org/bugzilla/show_bug.cgi?id=20266。 嘿,我遇到了同样的问题。你采取了哪些措施来解决这个问题?您在运行程序时是否收到过此错误:Unable to find Mach task port for process-id 62995: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8)) @nullbyte 见下面的答案,下载 gdb 到 8.0.1 工作正常。 @nullbyte 这实际上是一个单独的、不相关的问题。 See my question. @xdavidliu 这实际上是一个非常相关的问题。 【参考方案1】:

这是最新的gdb 8.1造成的,将gdb降级到8.0.1可以解决这个问题。

如何降级到 gdb 8.0.1

取消链接当前 gdb:brew unlink gdb 安装 gdb 8.0.1:brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb 可选:避免使用brew pin gdb 升级gdb

【讨论】:

它也对我有用。很奇怪为什么会出现这个错误,并且可能与much older error from 2016 混淆。不可能是同样的错误,因为 8.0.1 没有这个问题。我在the homebrew page 和sourceware bugzilla 提交了错误报告 经过一堆实验,我认为这是在提交 f6ac5f3d63e03a81c4ff3749aba234961cc9090e 中引入的错误。请参阅此错误的线程:sourceware.org/bugzilla/show_bug.cgi?id=22960 看起来这在 8.2 中仍然是一个问题。 射击。不幸的是,这似乎不再解决 Mojave 上的问题,即使最新的“修复 mojave”提交到 gdb 公式,错误仍然存​​在(即使在代码签名 gdb 之后)。 这在 macOS 10.14.2 上不起作用,列出原因会更有用。【参考方案2】:

在我的情况下,降级到 8.0.1 并没有帮助。 但以下步骤有所帮助。

(我插入了第 12 步,“检查它是否有效”,因为我没有重新启动,而是测试了 gdb,它工作得很好。我没有按照步骤 12+)


    打开钥匙串访问 在菜单中,打开 Keychain Access > Certificate Assistant > Create a certificate 给它一个名字(例如gdb-cert) 身份类型:自签名根 证书类型:代码签名 检查:让我覆盖默认值 继续直到“为...指定位置” 将钥匙串位置设置为系统 创建证书并关闭证书助手。 在系统钥匙串中查找证书。 双击证书 扩展信任,将代码签名设置为始终信任 在终端重启taskgated:killall taskgated 使用您的证书协同设计 gdb:codesign -fs gdb-cert /usr/local/bin/gdb --- 检查它是否工作 --- 关闭 Mac 并以恢复模式重新启动(按住 command-R直到出现苹果徽标) 打开终端窗口 修改系统完整性保护以允许调试:csrutil enable --without debug 重新启动您的 Mac 现在使用 gdb 进行调试应该可以正常工作了。

信息来源: 前塞拉利昂:https://gist.github.com/hlissner/898b7dfc0a3b63824a70e15cd0180154 塞拉:https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d

【讨论】:

很遗憾,这是一个无关的问题。 这些步骤在官方 Wiki 中进行了总结:sourceware.org/gdb/wiki/PermissionsDarwin。我认为不再需要 csrutil 步骤了。 Mac OS Sierra 10.13.6 gdb 8.0.1 我发现我的系统中已经有了 gdbcert1。遵循 7. 的所有内容。工作!【参考方案3】:

我使用的是 macOS 10.13.6,我遇到了同样的问题“(请检查 gdb 是代码签名的 - 请参阅 taskgated(8))”...

当我将 GDB 从 8.2.1 降级到 8.0.1,然后再次创建并签署 gdb-cert 时,它就可以正常工作了..

不要忘记在eclipse的调试器中将gdb的路径从8.2.1改成8.0.1,重启就可以了。

【讨论】:

以上是关于gdb 不适用于 macos High Sierra 10.13.3的主要内容,如果未能解决你的问题,请参考以下文章

使用NSView.layoutSubtreeIfNeeded()动画自动布局约束不适用于macOS High Sierra

缩放不适用于 MacOS 中的 NSSlider

Ujson 适用于 MacOS,但不适用于 Ubuntu

Eclipse CDT 不适用于 macOS Monterey

SwiftUI MacOS App AVPlayer 不适用于视频 URL

带有选择器的 SwiftUI 列表:选择不适用于自定义类型(macOS)