2

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

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

.gdbinit也可能有用,但我们可能会遇到无法在 .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 等效于 .gdbinit 和未来中断?.

杰夫

4

2 回答 2

3

更新

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

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

有关视频,请参阅此博客文章的第 2 步。

原来的

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

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

于 2012-11-15T07:45:40.153 回答
1

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

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

于 2012-11-15T20:25:36.640 回答