为啥 Xcode 断点不起作用?
Posted
技术标签:
【中文标题】为啥 Xcode 断点不起作用?【英文标题】:Why aren't Xcode breakpoints functioning?为什么 Xcode 断点不起作用? 【发布时间】:2010-09-09 01:13:57 【问题描述】:我设置了断点,但 Xcode 似乎忽略了它们。
【问题讨论】:
产品 → 清洁帮了我 ***.com/a/56036683/1522584 我必须完全重启我的电脑才能让它们再次工作,但现在它们出现了超级错误。我正在使用 xcode 10.2.1。 Xcode 11,重新启动并清理 Xcode 不工作,重新启动 Mac 不工作。删除设备上的应用程序并重建可修复此问题。希望这对某人有所帮助 【参考方案1】:转到 Xcode 调试首选项。 确保没有选择“懒加载符号”。
【讨论】:
不幸的是,Xcode 6 中没有“调试”首选项,文档中也没有出现“懒惰”。叹息。 好吧,现在我在 XCode 6 中找不到 'Load Symbols Lazily' 选项【参考方案2】:设置断点时,右键单击,您应该会获得几个关于如何处理断点的选项(记录变量并继续、暂停执行等)
还要确保在调试首选项中未选择“延迟加载符号”。
(适用于 Xcode 3.1,不确定过去/未来的版本)
【讨论】:
【参考方案3】:首先,我 100% 同意前面的人所说的转OFF Load Symbols Lazily
。
我还有两件事要补充。
(我的第一个建议听起来很明显,但第一次有人向我建议时,我的反应是这样的:“拜托,拜托,你真的认为我不会知道更好......哦。 ")
确保您没有不小心将“Active Build Configuration”设置为“Release”。
在项目的图形树显示中的“目标”下,右键单击目标并执行“获取信息”。寻找一个名为“生成调试符号”(或类似)的属性,并确保它是 CHECKED(又名 ON)。此外,您可以尝试查找(也在 Target >> Get Info 中)名为“Debug Information Format”的属性并将其设置为“Dwarf with dsym file”。
Target >> Get Info 下还有许多其他可能会影响您的属性。寻找诸如优化或压缩代码之类的东西并将其关闭(我假设您正在调试模式下工作,因此这不是坏建议)。另外,寻找诸如剥离符号之类的东西,并确保它也处于关闭状态。例如,Debug 目标的“Strip Linked Product”应设置为“No”。
【讨论】:
在 XCode 4.5.2 上我遇到了这个问题,原来是因为我启用了“链接时间优化”,所以这是另一件事要检查 要更改构建配置,请转到运行 - 信息下的产品 -> 方案 -> 编辑方案。对我来说,有效的是在该菜单中检查“调试可执行文件”。 劫持最佳答案以添加 Bison 语法似乎是断点不起作用的另一个(异国情调)原因(请参阅下面的答案)。希望能为遇到该问题的下一个人节省一些时间。 使用 ⌘Y 无意中切换断点激活也非常容易。因此,孩子们,请注意这一点。 要在 Xcode 8 中将“Active Build Configuration”设置为“Debug”而不是“Release”,请转到 Product -> Scheme -> Edit Scheme。点击左侧的运行。单击屏幕顶部的信息。在 Build Configuration 下拉菜单中,选择“Debug”。【参考方案4】:我还没有做过Xcode,但我建议你禁用“Zerolink”和“Load Symbols Lazily”;这将解决大多数问题。无论如何,Zerolink 是可憎的。
【讨论】:
【参考方案5】:Xcode 中的断点似乎有 3 种状态。如果您单击它们,它们将通过不同的设置。启用深蓝色,禁用灰色,有时我看到淡蓝色需要我再次单击断点才能使其变为深蓝色。
除此之外,请确保您使用调试命令而不是运行命令启动它。您可以通过点击 option + command + return 或运行菜单中的 Go(调试)选项来做到这一点。
【讨论】:
【参考方案6】:Xcode (2.4.1) 中的断点有很多问题。我使用一个只包含其他项目的项目(如 Visual Studio 中的解决方案)。我发现有时断点根本不起作用,除非在启动项目中设置了至少一个断点(即包含我的代码入口点的断点)。如果唯一的断点位于“较低级别”的项目中,它们就会被忽略。
如果您在包含断点所在的源代码行的项目中对断点进行操作,Xcode 似乎也只能正确处理断点操作。
如果我尝试通过另一个项目删除或禁用断点,该操作有时不会生效,即使调试器表明它已经生效。所以我会发现自己在禁用的断点上或在我之前删除的(现在不可见的)断点上中断。
【讨论】:
【参考方案7】:我相信项目在断点方面也可能会损坏。例如,我有一个项目,它不会在它从上一个会话中记住的任何断点上中断。我第一次写了这个here
【讨论】:
【参考方案8】:我的断点不起作用,然后完成了构建/清理所有目标以使它们再次工作。
【讨论】:
【参考方案9】:还要确保设备上没有安装应用的 AppStore 分发版。
【讨论】:
【参考方案10】:我只是遇到了同样的问题(再次)。在三重检查“懒惰地加载符号”并剥离和调试信息生成标志之后,我做了以下事情:
-
退出 Xcode
打开一个终端窗口并 cd 到项目目录
cd 进入 .xcodeproj 目录
删除 .pbxproj 文件以外的所有内容(我有 frank.mode1v3 和 frank.pbxuser)
您可以通过右键/选项单击 .xcodeproj 包并选择“显示包内容”在 finder 中完成相同的任务。
当我重新启动 Xcode 时,我的所有窗口都已重置为默认位置等,但断点工作!
【讨论】:
这行得通,但它会删除你所有的偏好...这应该在没有其他方法的情况下完成。 为我工作,谢谢。我想知道为什么 Xcode 这么烂。 Xcode 是 Apple 编写的最糟糕的软件。 哇,5 岁了。很难相信它仍然有效,而且它仍然是一个问题! 对我不起作用。我正在运行 Xcode 6.01。现在,当我构建时,我收到多个丢失的文件错误。我正在还原我的代码以解决问题。 只需要重新启动Xcode,我的情况是由于git版本控制,提交xcode用户界面状态数据时。【参考方案11】:要检查的另一件事是,如果您的调试模式有一个“权利”plist 文件(可能是因为您正在使用钥匙串进行操作),请确保该 plist 文件具有“get-task-allow”=是行。没有它,调试和日志记录将被破坏。
【讨论】:
请注意,get-task-allow 权利可能包含在 Xcode 托管配置文件中:imgur.com/a/qS27asO【参考方案12】:看到这个帖子:Breakpoints not working in Xcode?。您可能正在推动“运行”而不是“调试”,在这种情况下,您的程序没有在 gdb 的帮助下运行,在这种情况下,您不能指望断点起作用!
【讨论】:
在 Xcode 6.4 中,现在只有一个运行按钮,它是否运行调试配置取决于当前选择的方案设置。【参考方案13】:我有 Xcode 3.2.3 SDK 4.1 断点会随机失败。我发现如果你清理构建并使用构建下的触摸命令它们会再次工作。
【讨论】:
【参考方案14】:这是我遇到的一个晦涩难懂的问题:如果您正在使用共享库(或插件),您的断点会在启动时变为黄色,这可能会导致您沮丧地敲击键盘并终止调试过程。好吧,不要那样做!在应用程序加载库之前,不会加载符号,此时断点将变为有效。我在使用浏览器插件时遇到了这个问题...在我浏览到实例化我的插件的页面之前,BP 被禁用。
【讨论】:
【参考方案15】:当我想调试自定义可执行文件为 Safari 5.1 的 Web 插件时,我遇到了同样的问题。 在将我的 Safari 从 4.0.5 升级到 5.1 之前,它运行良好。 再次安装 Safari 4.0.5 后,所有断点都开始工作而无需修改任何 Xcode 设置。
【讨论】:
【参考方案16】:我认为问题可能是设备版本和 Xcode 之间的不兼容。我在运行 ios 5.0.1 的 iPhone 4S 上尝试调试时遇到了这个问题。我仍在使用 Xcode 3.2.5。我通过在管理器窗口中选择“使用此设备进行开发”从手机中获取符号。然而,这款手机拒绝断点。我的旧 3GS 将断点,相同的 Xcode 项目,相同的设置...只是不同的设备,它运行 iOS 4.0。我猜这是 3.2.5 中的 Xcode 错误,因为我有符号。到目前为止,已经尝试了此处发布的所有解决方案,我决定解决我的问题的方法是继续升级到 XCode 4。也许您无法有效地调试,除非您的基础 SDK 至少与要调试的系统一样高。也许这很明显 - 任何人都可以确认吗?
编辑:当我确认这是真的时,我会更新。
【讨论】:
【参考方案17】:对于 Xcode 4.x: 转到产品>调试工作流程并取消选中“调试时显示反汇编”。
对于 Xcode 5.x 转到调试>调试工作流程并取消选中“调试时显示反汇编”。
【讨论】:
【参考方案18】:在 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
【讨论】:
【参考方案19】:如果您使用的是 subversion,只需将您的项目文件(仅)恢复到您上次知道调试器正在工作的时间。
【讨论】:
【参考方案20】:刚刚在XCode 4.2
中解决了这个问题,以上都没有帮助。事情是(我不确定实际发生了什么,但是,也许这对某人有帮助):我的队友在 SVN 中创建了新的构建配置和更新的项目。我在运行方案设置中设置了旧的构建配置,所以我的步骤是:
-
产品 -> 编辑方案...
选择“运行 %project_name.app%”(或任何导致问题的原因)
在构建配置组合中,从我的队友那里选择新的构建配置
就是这样,断点又回来了。希望这会有所帮助。
【讨论】:
【参考方案21】:断点变黄的另一个原因是,如果您正在调试的应用程序二进制文件在首次运行后已被修改。在我的例子中,我在调试了一次程序后,在应用程序的 Contents/Resources 文件夹中添加了一个文件夹。在添加文件夹后的调试运行中,断点变为黄色并被忽略。我修改了我的程序:我做了一个清理,一个构建,添加了文件夹,然后运行,一切都很好。
也许 Xcode(或 OS X)会创建并记住它自己的应用程序数字签名(没有数字签名),然后,感知到应用程序被修改,拒绝尝试设置断点.通过在应用程序的第一次(调试)运行之前制作我的模组,数字签名是由我的模组制作的。
所有这些都在使用 Xcode 3.2.2 的 OS X 10.6.8 上。
【讨论】:
【参考方案22】:对于 Xcode 4:
go Product -> Debug -> Activate Breakpoints
这适用于所有 Xcode 版本。快捷键是:command key + Y.
按此组合键激活/停用断点。
【讨论】:
【参考方案23】:您可以在目标设置 Apple LLVM Compiler 4.1 代码生成部分中检查一项设置 生成调试符号 = YES
【讨论】:
【参考方案24】:我有 Xcode 版本 4.6.3 并且断点从未在包含项目的子组中工作。该项目将编译并运行良好;它甚至会附加到调试器并适当地吐出 NSLog 输出。
问题与我的标题搜索路径有关。我让其中一些设置为“递归”,而不是默认的“非递归”。将它们全部更改为“非递归”并更新所有相关的导入适当地解决了问题。
【讨论】:
【参考方案25】:至少在 iOS 项目中会不时发生这种情况。为了修复它,我必须重启 iOS 设备,退出 Xcode,然后重建项目。
【讨论】:
【参考方案26】:我发现了问题。不知何故,在我的 XCode 中启用了“调试时显示反汇编”,这会产生该问题。当我禁用它时,我的所有调试器都停止在我的源代码中。
调试时可以在Product->Debug Workflow->Show Disassembly
下找到。
【讨论】:
【参考方案27】:您可以在下拉菜单中激活/禁用断点
【讨论】:
【参考方案28】:同时拥有 Xcode 5 和 6 GM 会导致前者失去断点功能(Xcode 6 beta 还可以)。
我尝试了许多建议的方法,但最终放弃了,我现在只使用 Xcode 6。
【讨论】:
【参考方案29】:来到这个页面时遇到了同样的问题(Xcode 6 中的 C 代码不会在断点处停止)并且上述解决方案都没有奏效(该项目实际上是开箱即用的,设置方面的,所以任何调试器设置被设置为错误的值)...
在浪费了相当长的时间来解决问题之后,我终于找出了罪魁祸首(对于我的代码):
Xcode (/LLVM) 不喜欢 Bison 风格的 #line
预处理器命令。
删除它们解决了问题(调试器在我的断点处停止)。
【讨论】:
【参考方案30】:删除我的 Build 文件夹解决了我的问题。
【讨论】:
以上是关于为啥 Xcode 断点不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 4.3.2 + iOS SDK 5.1 异常断点不起作用