GDB类型不适用于macOS Sierra

时间:2016-09-26 12:29:35

标签: gdb macos-sierra

这是我昨天第一次更新到macOS Sierra时出现的问题。

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

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

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

9 个答案:

答案 0 :(得分:60)

这就是我轻松解决问题的方法。 [更新:基于收到的反馈并且尚未得到验证,似乎此解决方案适用于macOS Sierra 10.12但不适用于macOS Sierra 10.12.2]

请参阅视频说明here

  1. 退出gdb
  2. 使用文字编辑器,例如Sublime Text,在您的用户文件夹中保存名为>>> from xml.dom.minidom import parseString >>> def get_tags(xml, tag_name): ... return [d.childNodes[0].data for d in parseString(xml).getElementsByTagName(tag_name)] ... >>> sc.wholeTextFiles('xmls').flatMap(lambda file: get_tags(file[1], "text")).collect() [u'1111', u'2222', u'3333', u'4444', u'5555', u'6666'] 的文件。
  3. 在文件中添加以下内容:.gdbinit
  4. 保存文件
  5. gdb现在可以正常工作
  6. 来源

    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

答案 1 :(得分:10)

更新到macOS Sierra后我遇到了同样的错误。暂时我使用库lldbmi2将调试器更改为LLDB:
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之后,您可以通过在Debug Configurations中创建一个新的C / C ++应用程序来调试您的应用程序......并将GDB调试器(在Debugger选项卡中)从gdb更改为lldbmi2。可以在那里设置lldbmi2的选项。像/ usr / local / bin / lldbmi2 --log。

之类的东西

enter image description here

一切似乎都很好,甚至更好,就像GDB一样。

答案 2 :(得分:5)

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

  
      
  1. 重启系统保持命令+ R按下直到Apple徽标   出现在屏幕上。
  2.   
  3. 在终端
  4. 中选择菜单Utilities / Terminal Type“csrutil enable --without debug”   
  5. 最后,重新启动机器
  6.         

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

         

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

答案 3 :(得分:5)

适用于Sierra 10.12.0的多种解决方案不适用于Sierra 10.12.1。在这个版本中,您需要更新版本的GDB(11月9日在FSF上提交的补丁),此外还要通过“设置启动时关闭shell”来禁用shell的产生。请参阅http://blog.adacore.com/gnat-on-macos-sierra

上的说明

答案 4 :(得分:5)

假设您的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. 完成!玩得开心〜
  7. 顺便说一下,您可以使用lldb替换gdb。

答案 5 :(得分:4)

我和Sierra有过多个问题。

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

("干得好" Apple)。

"升级"到Sierra我建议采取以下步骤让GDB工作:

  1. 安装较新的gcc(大约需要60分钟 - 取决于您的CPU等...)

    brew install gcc

  2. 下载GDB的源代码

  3. 由于gcc和g ++是旧gcc的别名而g ++确保将其链接到较新的gcc和g ++,例如:

    导出CC =`gcc-6`

    导出CXX =`哪个gxx-6`

  4. 配置&编译gdb:

    ./配置

    make CFLAGS = -Wno-error = deprecated-declarations CXXFLAGS = -Wno-error = deprecated-declarations

    sudo make install

答案 6 :(得分:4)

这对我有用:

  • 取消链接当前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

答案 7 :(得分:2)

我知道我的答案与GDB没有特别的关系,但由于我在使GDB自己工作方面遇到了一些困难,我还是建议你试试LLDB。对我来说,它就像一个魅力:

https://developer.apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-terminal-workflow-tutorial.html

由于Xcode本身现在使用LLDB而不是GDB,因此对于Mac用户来说,这可能是一种更方便的选择。而且,在我的特定情况下,它在Eclipse中比GDB更容易集成:

https://wiki.eclipse.org/CDT/User/FAQ#How_do_I_get_the_LLDB_debugger.3F

答案 8 :(得分:2)

截至今天的更新(2021-04-08,Big Sur 11.2.3 (20D91),gdb 版本 10.1):I got it to worksome patches

  1. 使用 brew install --build-from-source domq/gdb/gdb 安装 gdb
  2. Code-sign it
  3. 如果 gdb 无法读取您的二进制文件 (not in executable format: file format not recognized),您可能需要“un-fat” it first
    lipo -thin x86_64 -output ls-x86_64 /bin/ls

⚠ 您目前似乎无法break main — 我可能会也可能不会很快回复您。