2016-09-26 102 views
36

这是我昨天第一次更新到macOS Sierra时出现的一个问题。GDB类型在macOS上无效Sierra

GDB本身运行正常。但是,不知何故,它无法运行我的程序。当我输入“运行”和“输入”时,它立即崩溃并显示以下信息: During startup program terminated with signal SIG113, Real-time event 113.

我的GDB基于自制软件。所以今天,我卸载了整个自制软件包并重新安装了它。在编码步骤之后,我仍然面临同样的错误。

我试过'sudo'和其他一些东西。谷歌不知道发生了什么。所以我想知道你们是否可能有一些神奇的解决方案。

+0

'brew update && brew upgrade gdb',codesigning和'set startup-with-shell off' config(后两个是brew提到的),它看起来像我们正在开展业务。 Sierra 10.12.1。 –

回答

5

更新到macOS Sierra后,我得到了同样的错误。
1. git clone https://github.com/freedib/lldbmi2.git lldbmi2
2. cd lldbmi2
3. mkdir build
4. cd build
5. cmake ../
6. make
7. sudo make install

:暂时我使用的库 lldbmi2改变调试器LLDB

安装lldbmi2后,您可以通过创建新的C/C++应用程序来调试应用程序n,然后将GDB调试器(在调试器选项卡中)从gdb更改为lldbmi2。 lldbmi2的选项可以在那里设置。像/ usr/local/bin/lldbmi2 --log。

enter image description here

一切似乎是工作的罚款,甚至更好,因为GDB。

+0

我认为你需要修改第5步到'cmake ..',否则,效果很好!谢谢! – uclatommy

+0

我尝试了几个gdb相关的解决方案,但都没有工作。我并不想降低安全性。但是这个解决方案像一个魅力 - 在高山(10.13.1)!!!谢谢。 –

+0

这个解决方案像High Sierra(10.13.2) 一样魅力很多谢谢 – Yehuda

5

这是由于Sierra中的运行时完整性保护功能 - 您可以按照说明here将其停用。

  1. 重新引导系统保持命令+ R按钮,直到苹果标志 出现在屏幕上。
  2. 选择菜单工具/终端类型的终端“csrutil使--without调试”
  3. 最后,重新启动机器再次

注意,禁用此会降低系统的安全性,因此 做上述事情应该是你的决定。

此更改的另一个影响是,通过shell生成新进程时,不再重置DYLD_LIBRARY_PATH变量 。动态链接器使用此 变量来查找动态库。它的 优先于在可执行文件中编码的搜索路径,所以 被OS视为不安全。因此,默认情况下macOS会将变量设置为 ,以便您生成的可执行文件使用自己的库。 我们建议使用DYLD_FALLBACK_LIBRARY_PATH,而不是在应用程序的库搜索路径后使用 ,以防某些库 仍未找到。

+0

请包括一些关于stackoverflow的说明! – abbath

+0

这对我有帮助。 –

+0

适合我+1 – debris

51

这就是我很容易解决的问题。 [更新:根据收到的反馈,并还有待考证,似乎该解决方案可与MacOS的塞拉利昂10.12,但不与MacOS的塞拉利昂10.12.2]

见视频指令here

  1. 退出GDB
  2. 使用你的文本编辑器例如崇高文本,在用户文件夹中保存一个名为“.gdbinit”[排除引号]的文件。
  3. 在文件中添加以下内容:“设置启动与 - 壳脱落” [不带引号]
  4. 保存文件
  5. GDB现在应该工作

来源

https://discussions.apple.com/thread/7684629?start=0&tstart=0

Where is .gdbinit is located and how can I edit it?

https://sourceware.org/gdb/onlinedocs/gdb/Starting.html

+12

不解决与OS X Sierra(对我来说)的问题。 – user2664470

+1

@ user2664470它似乎不适用于macOS Sierra 10.12.2。什么是你的macOS版本? – Salamit

+1

macOS Sierra 10.12.1 – user2664470

5

适用于Sierra 10.12.0的多种解决方案不适用于Sierra 10.12.1。在这个版本中,除了禁用'set startup-with-shell off'功能来禁止产生shell外,还需要更新版本的GDB(11月9日在FSF上提交补丁)。请参阅http://blog.adacore.com/gnat-on-macos-sierra的说明

3

我一直有Sierra的多个问题。

对于初学者来说,我之前在OSX版本上工作过的代码在此版本上停止工作 。也不会编译。另外,从酿造GDB是一个完整的混乱。添加到其他第三方库已损坏(例如libevent)。

(“Good job”Apple)。

“升级”到塞拉利昂之后,我建议以下步骤获得GDB工作:

  1. 安装一个新的gcc(如果需要大约60分钟 - 这取决于你的CPU等的...)

    酿造安装gcc

  2. 下载GDB

  3. 的源代码由于gcc和g ++被混叠到旧gcc和g ++请务必将其链接到新的gcc和g ++如:

    出口CC =`这GCC-6`

    出口CXX =`这GXX-6`

  4. 配置&编译GDB:

    。/配置

    让CFLAGS = -Wno错误=弃用申述CXXFLAGS = -Wno错误=弃用申述

    须藤使安装

3

假设你的MacOS版本是10.12.6。

  1. 你的GDB升级到8.0.1版brew upgrade gdb
  2. 执行echo "set startup-with-shell off" >> ~/.gdbinit(我看到这个命令时,我安装了BREW GDB)
  3. 创建名称gdb-cert证书和代码信任此证书签名选项
  4. 重新启动您的mac
  5. 执行sudo codesign -s gdb-cert /usr/local/bin/gdb
  6. 完成!玩得开心〜

顺便说一下,你可以用lldb来代替gdb。