【问题标题】:Xcode: Automatic (Permanent) Breakpoint on malloc_error_break?Xcode:malloc_error_break 上的自动(永久)断点?
【发布时间】:2012-11-03 18:23:19
【问题描述】:

是否可以在 Xcode 下的 malloc_error_break 上设置自动(或永久)断点? (如果它在 Xcode 中而我错过了,请指出)。我希望它可以在 Xcode 下的任何地方工作——从 GDB 到 LLDB,再到新旧项目。我真的很希望它可以在设备上工作,但这可能会很长(it appears something is broken 在设备上使用 malloc 保护)。

我在想.lldbinit 可能会有所帮助,但 LLDB 有点扼杀了这个想法。看起来 LLDB 不支持在.lldbinit 中设置的断点(根据breakpoint list)(http://lldb.llvm.org/tutorial.html)。 LLDB 也忽略了.lldbinit-Xcode 中的断点(感谢 Rob)。

.gdbinit 也可能有用,但我们可能会遇到Unable to set pending breakpoints in .gdbinit 讨论的错误。这是 Apple,他们的 QA 流程完全崩溃,所以我不希望它被修复。

总而言之,以下内容不适用于此 Mac(MacBook Pro,10.8)和 Xcode (4.5.2):

riemann: jwalton$ cat ~/.lldbinit
# http://lldb.llvm.org/tutorial.html
# Not honored by LLDB
breakpoint set --name malloc_error_break
# Shot in the dark since the previous is not honored
breakpoint set pending --name malloc_error_break
riemann: jwalton$ cat ~/.gdbinit 
set breakpoint pending on
set breakpoint malloc_error_break
set breakpoint pending auto

编辑 (2013/02/07):另见 lldb equivalent of .gdbinit and future break?

杰夫

【问题讨论】:

    标签: xcode gdb breakpoints lldb


    【解决方案1】:

    更新

    有一种简单的方法可以在 Xcode 中设置永久的、所有项目的断点。

    打开任何项目。转到断点导航器。在malloc_error_break 上创建一个符号断点。然后,右键单击导航器中的断点,并从弹出菜单中选择 Move Breakpoint To > User。 Xcode 将用户断点应用于所有项目。

    请参阅step 2 of this blog post 观看视频。

    原创

    LLDB 有自己的 init 文件,称为…(请鼓掌)….lldbinit。你也可以在那里设置断点。 WWDC 2012 的“Session 415 - Debugging with LLDB”视频从 29 分 43 秒开始深入讨论这个文件。您甚至可以创建一个.lldbinit-Xcode 文件,LLDB 仅在其在 Xcode 下运行时才会加载。

    我对 GDB 挂起断点问题没有任何建议。

    【讨论】:

    • 谢谢罗伯。看起来 LLDB 不遵守.lldbinit 中指定的断点(根据breakpoint list)。它的苹果。除了损坏的软件,您还能期待什么?
    • 正如我在回答中解释的那样,这是 Xcode 4.5 中 lldb 的一个已知限制。它将在下一个版本中修复。
    【解决方案2】:

    关于您的 gdb 断点,Mac OS X gdb 与通用 FSF gdb 稍有不同,您应该可以只使用 b malloc_error_break 在此处设置永久断点,或者在最坏的情况下使用 fb malloc_error_break(Apple-gdb明确的特定future-break 命令)。

    Xcode 4.5 中的 lldb 存在一个错误,即未添加在 .lldbinit 文件中设置的断点。与其说是设计缺陷,不如说是错误,实际上,断点被添加到 target 中,当读取 .lldbinit 文件时,lldb 还没有设置目标。我认为 Greg Clayton 几个月前在 svn 存储库 lldb 源中修复了该问题,创建了一个占位符,用于应用从那时起安装在任何新创建的目标中的此类设置。使用 svn lldb 源,将 br s -n malloc_error_break 放入您的 .lldbinit 应该可以正常工作。

    【讨论】:

    • 谢谢。 “使用 svn lldb 源......” - 不知道在 Apple 平台上会发生什么。该平台很脆弱,不像 Linux/GDB 或 Windows/WinDbg。我不敢尝试。
    • 我知道已经有一段时间了,但是您指的是 LLDB 的哪个 SVN 版本?在撰写本文时,Xcode 附带的 LLDB 版本似乎包含该补丁 - 在这种情况下,Xcode 版本是 5.0.2 (5A3005),LLDB 版本是 lldb-300.2 .53.
    猜你喜欢
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 2018-06-30
    • 2017-02-17
    相关资源
    最近更新 更多