我设置了断点,但 Xcode 似乎忽略了它们。
51 回答
首先,我 100% 同意前面所说的 turn OFF Load Symbols Lazily
。
我还有两件事要补充。
(我的第一个建议听起来很明显,但第一次有人向我建议时,我的反应是这样的:“拜托,拜托,你真的认为我不会知道更好......哦。”)
确保您没有不小心将“Active Build Configuration”设置为“Release”。
在项目的图形树显示中的“目标”下,右键单击目标并执行“获取信息”。寻找一个名为“生成调试符号”(或类似)的属性,并确保它是 CHECKED(又名 ON)。此外,您可以尝试查找(也在 Target >> Get Info 中)名为“Debug Information Format”的属性并将其设置为“Dwarf with dsym file”。
Target >> Get Info 下还有许多其他可能会影响您的属性。寻找诸如优化或压缩代码之类的东西并将其关闭(我假设您正在调试模式下工作,因此这不是坏建议)。另外,寻找诸如剥离符号之类的东西,并确保它也处于关闭状态。例如,调试目标的“Strip Linked Product”应设置为“No”。
转到 Xcode 调试首选项。确保未选择“延迟加载符号”。
我只是有同样的问题(再次)。在三重检查“懒惰地加载符号”并剥离和调试信息生成标志之后,我做了以下事情:
- 退出 Xcode
- 打开一个终端窗口并 cd 到项目目录
- cd 进入 .xcodeproj 目录
- 删除除 .pbxproj 文件之外的所有内容(我有 frank.mode1v3 和 frank.pbxuser)
您可以通过右键/选项单击 .xcodeproj 包并选择“显示包内容”在 finder 中完成相同的任务。
当我重新启动 Xcode 时,我的所有窗口都已重置为默认位置等,但断点工作!
可能的解决方案之一可能是 .... 转到 Product>Scheme>Edit scheme>..Under Run>info>Executable 检查“调试可执行文件”。
对于 Xcode 4.x:转到 Product>Debug Workflow 并取消选中“Show Disassembly When Debugging”。
对于 Xcode 5.x 转到 Debug>Debug Workflow 并取消选中“Show Disassembly When Debugging”。
另一个原因
DeploymentPostprocessing
在 BuildSettings 中设置为 NO -详情请点击此处
简而言之 -
激活此设置表示应剥离二进制文件并将文件模式、所有者和组信息设置为标准值。[部署_后处理]
请参阅这篇文章:断点在 Xcode 中不起作用?. 您可能正在推动“运行”而不是“调试”,在这种情况下,您的程序没有在 gdb 的帮助下运行,在这种情况下,您不能指望断点起作用!
XCode 9.4.1 对我的解决方案(没有在任何断点处停止):
在构建目标->构建设置->优化级别:从“优化速度”->“无优化”切换(现在它更慢但有效)
这让我在 Xcode 9 中度过了令人沮丧的半天。它最终成为一个简单的调试设置。
转到“调试”>“调试工作流程”并确保“始终显示反汇编”已关闭。就那么简单。:(
在我的情况下解决它的方法非常简单,在 Xcode - Product - Clean Build Folder 之后是 Product - Run(不是 Play Xcode 按钮)。
(长按 Xcode 播放按钮切换到单元测试后,Xcode 11 -beta 4 出现问题)
对于 Xcode 4:
go Product -> Debug -> Activate Breakpoints
这适用于所有 Xcode 版本。快捷键是:command key + Y.
按此组合键激活/取消激活断点。
来到这个页面时遇到了同样的问题(Xcode 6 中的 C 代码没有在断点处停止)并且上面的解决方案都没有工作(该项目实际上是开箱即用的,设置方面,所以任何调试器设置的机会都很少设置为错误的值)...
在浪费了相当多的时间来解决问题之后,我终于找出了罪魁祸首(对于我的代码):
Xcode (/LLVM) 不喜欢 Bison 风格的#line
预处理器命令。
删除它们解决了问题(调试器在我的断点处停止)。
问题
(可能)原因及解决方案
- 原因:Xcode 错误
- 原因:禁用调试
- 原因:禁用所有断点
- 原因:调试信息被优化
有关的
XCode 的符号断点不起作用
- 背景
XCode 崩溃日志
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFConstantString stringByAppendingString:]: nil argument'
添加 XCode 符号断点
-[__NSCFConstantString stringByAppendingString:]:
但断点不起作用
- 解决方案
改成:
-[NSString stringByAppendingString:]
Xcode(2.4.1)中的断点有很多问题。我使用一个只包含其他项目的项目(如 Visual Studio 中的解决方案)。我发现有时断点根本不起作用,除非在起始项目中设置了至少一个断点(即包含我的代码入口点的断点)。如果唯一的断点位于“较低级别”的项目中,它们就会被忽略。
如果您在包含断点所在的源代码行的项目中对断点执行操作,则似乎 Xcode 仅正确处理断点操作。
如果我尝试通过另一个项目删除或禁用断点,该操作有时不会生效,即使调试器表明它已经生效。因此,我会发现自己在禁用断点上或在我之前删除的(现在不可见的)断点上中断。
我的断点不起作用,然后完成了 Build / Clean All Targets 以使它们再次工作。
我认为问题可能是设备版本和 Xcode 之间的不兼容。我在运行 iOS 5.0.1 的 iPhone 4S 上尝试调试时遇到了这个问题。我仍在使用 Xcode 3.2.5。我通过在管理器窗口中选择“使用此设备进行开发”从手机中获取符号。然而,这款手机拒绝断点。我的旧 3GS将断点,相同的 Xcode 项目,相同的设置......只是不同的设备,它运行 iOS 4.0。我猜这是 3.2.5 中的 Xcode 错误,因为我有符号。到目前为止,我已经尝试了这里发布的所有解决方案,我决定解决我的问题的方法是继续升级到 XCode 4。也许你无法有效地调试,除非你的基础 SDK 至少与要调试的系统一样高。也许这很明显 - 任何人都可以确认吗?
编辑:当我确认这是真的时,我会更新。
删除我的 Build 文件夹为我解决了这个问题。
为此,对于 Xcode 6 及更高版本,请确保断点状态按钮已激活(蓝色箭头状按钮):
如果所有其他方法都失败了,而不是断点,您可以调用以下函数:
void BreakPoint(void) {
int i=1;
#if !__OPTIMIZE__
printf("Code is waiting; hit pause to see.\n");
while(i);
#endif
}
要恢复,手动将 i 设置为零,然后点击恢复按钮。
我在 XCode 6.3.1 中也发生了同样的事情。我设法通过以下方式修复它:
- 转到查看->导航器->显示调试导航器
- 右键单击项目根目录 -> 移动断点(如果选择了用户选项)
- (我还选择了选项share breakpoints,即使我不确定是否有必要)。
完成该更改后,我将“移动断点”选项设置回项目,并取消选择“共享断点”选项,并且仍然有效。
我不完全知道为什么,但这让我的断点回来了。
在 Xcode 4 中
- Product menu > Manage Schemes
- Select the scheme thats having debugging problems (if only one choose that)
- Click Edit button at bottom
- Edit Scheme dialog appears
- in left panel click on Run APPNAME.app
- on Right hand panel make sure youre on INFO tab
- look for drop down DEBUGGER:
- someone had set this to None
- set to LLDB if this is your preferred debugger
- can also change BUILD CONFIGURATION drop down to Debug
- but I have other targets set to AdHoc which debug fine once Debugger is set
我发现了问题。不知何故,在我的 XCode 中启用了“调试时显示反汇编”,这会产生该问题。当我禁用它时,我的所有调试器都停止在我的源代码中。
您可以在以下位置找到它:Product->Debug Workflow->Show Disassembly
调试时。
您可以在下拉菜单中激活/禁用断点
我尝试了上述所有方法,但对我来说,只停用一次调试断点然后激活它们就可以了。
设置断点时,右键单击,您应该获得有关如何处理断点的几个选项(记录变量并继续,暂停执行等)
还要确保在调试首选项中未选择“延迟加载符号”。
(适用于 Xcode 3.1,不确定过去/未来的版本)
我还没有做过 Xcode,但我建议你禁用“Zerolink”和“Load Symbols Lazily”;这将解决大多数问题。无论如何,Zerolink 都是可憎的。
Xcode 中的断点似乎有 3 种状态。如果您单击它们,它们将通过不同的设置。启用深蓝色,禁用灰色,有时我看到淡蓝色,这需要我再次单击断点以使其变为深蓝色。
除此之外,请确保您使用调试命令而不是运行命令启动它。您可以通过点击 option + command + return 或运行菜单中的 Go(调试)选项来做到这一点。
我相信一个项目也可能在断点方面被破坏。例如,我有一个项目,它不会在它从上一个会话中记住的任何断点上中断。我首先在这里写了这个
还要确保设备上没有安装应用程序的 AppStore 分发版。
要检查的另一件事是,如果您的调试模式有一个“权利”plist 文件(可能是因为您正在使用钥匙串进行操作),请确保该 plist 文件具有“get-task-allow”= YES 行。没有它,调试和日志记录将被破坏。
我有 Xcode 3.2.3 SDK 4.1 断点会随机失败。我发现如果您清理构建并使用构建下的 touch 命令,它们会再次起作用。
这是我遇到的一个晦涩难懂的问题:如果您正在使用共享库(或插件),则断点在启动时会变黄,这可能会导致您沮丧地敲击键盘并终止调试过程。好吧,不要那样做!在应用程序加载库之前,不会加载符号,此时断点将变为有效。我在浏览器插件中遇到了这个问题......在我浏览到实例化我的插件的页面之前,BPs 被禁用。
当我想调试自定义可执行文件为 Safari 5.1 的 Web 插件时,我遇到了同样的问题。在将我的 Safari 从 4.0.5 升级到 5.1 之前,它运行良好。再次安装 Safari 4.0.5 后,所有断点都开始工作而无需修改任何 Xcode 设置。
如果您使用的是颠覆,只需将您的项目文件(仅)恢复到您知道调试器正在工作的最后一次。
刚刚解决了这个问题XCode 4.2
,以上都没有帮助。事情是(我不确定实际发生了什么,但是,也许这对某人有帮助):我的队友在 SVN 中创建了新的构建配置和更新的项目。我在运行方案设置中设置了旧的构建配置,所以我的步骤是:
- 产品 -> 编辑方案...
- 选择“运行 %project_name.app%”(或任何导致问题的原因)
- 在构建配置组合中,从我的队友那里选择新的构建配置
仅此而已,断点又回来了。希望这可以帮助。
断点变黄的另一个原因是,如果您正在调试的应用程序二进制文件在首次运行后已被修改。在我的例子中,我在调试了一次程序后,在应用程序的 Contents/Resources 文件夹中添加了一个文件夹。在添加文件夹后的调试运行中,断点变为黄色并被忽略。我修改了我的程序:我进行了清理,构建,添加了文件夹,然后运行,一切都很好。
也许 Xcode(或 OS X)会创建并记住它自己的应用程序数字签名(未进行数字签名),然后,感知到应用程序已被修改,拒绝尝试设置断点。通过在应用程序的第一次(调试)运行之前制作我的模组,数字签名是用我的模组制作的。
所有这些都在使用 Xcode 3.2.2 的 OS X 10.6.8 上。
您可以在目标设置 Apple LLVM Compiler 4.1 Code Generation Section Generate Debug Symbol = YES 中检查一项设置
至少在 iOS 项目中会不时发生这种情况。为了修复它,我不得不重启 iOS 设备,退出 Xcode,然后重建项目。
同时拥有 Xcode 5 和 6 GM 会导致前者失去断点功能(Xcode 6 beta 还可以)。
我尝试了许多建议的方法,但最终放弃了,我现在只使用 Xcode 6。
在 Xcode 6.4 上,我需要重新启动我的 Mac。
(尝试启用/禁用断点、重启 iOS 设备、重启 Xcode、从工作区包中删除断点文件...)
在使用模拟器并将 Scheme Launch 设置为“等待可执行文件”时,我遇到了 Xcode 丢失断点的问题。将其更改为“自动启动”,断点就会恢复生机。
将我的 xCode 更新到版本 11.0 (11A420a) 时,我已经开始遇到这个问题。为了解决我安装了额外的模拟器版本 12.2 并将我的 iPhone 版本更新为 13.1 的问题。现在,在 iOs 模拟器和我的设备上的断点都会受到影响。
在我的情况下,我用我的构建覆盖了现有的应用商店构建。我删除了它,它现在可以工作了。
如果您使用 Xcode 版本 11.1 (11A1027) 确保您没有使用应用商店凭据(配置文件),因为在这种情况下将安装构建并且没有日志或调试器将起作用,我花了很多时间来弄清楚它出来了,Xcode 更新了。现在构建安装在设备上,没有任何警告。
在 Xcode 13 上,当断点所在的代码从未被调用时,就会发生这种情况。
我有 Xcode 版本 4.6.3 并且断点从未在包含项目的子组中工作。该项目将编译并运行良好;它甚至会附加到调试器并适当地吐出 NSLog 输出。
该问题与我的标题搜索路径有关。我让其中一些设置为“递归”而不是默认的“非递归”。将它们全部更改为“非递归”并更新所有相关导入适当地解决了问题。
就我而言,我发现断点已被意外停用。您可以通过Debug->Activate Breakpoints [Cmd+Y] 再次重新激活它。如果您注意到灰色断点标记而不是通常的蓝色标记,则很可能是这种情况。
事实证明,您始终可以使用 Cmd+Y 键切换断点激活,您可能在没有注意到它的情况下点击了此组合键。本报告基于 Xcode 7.2。
要尝试的事情:
1) 重新启动 xcode 2) 选择另一个模拟器 - 这是我的情况 3) 重新启动 mac。
如果这些都不起作用。然后查看项目设置。(这是最不可能的事情。)
我有类似的问题。我重新安装了xcode。解决了我的问题