为什么 Xcode 断点无法工作?

我设置了断点,但 Xcode 似乎忽略了它们。

134510 次浏览

转到 Xcode 调试首选项。 确保没有选择“惰性加载符号”。

在设置断点时,右键单击,您应该会得到几个关于如何处理断点的选项(log vars 和 Continue、暂停执行等)

还要确保在调试首选项中没有选择“惰性加载符号”。

(适用于 Xcode 3.1,不确定过去/未来的版本)

首先,我100% 同意之前那些说转 关掉 Load Symbols Lazily的人。

我还有两件事要补充。

(我的第一个建议听起来很明显,但是第一次有人向我建议的时候,我的反应是这样的: “拜托,你真的认为我不会知道得更好... ..。哦”)

  1. 确保您没有意外地将“活动构建配置”设置为“发布”

  2. 在项目图形树显示的“ Targets”下,右键单击 Target 并执行“ Get Info”查找名为“ GenerateDebug 符号”(或类似的)的属性,并确保该属性为 CHECKED (aka ON)。此外,您可以尝试查找(也在 Target > > Get Info 中)一个名为“ Debug Information Format”的属性,并将其设置为“ Dwarf with dsym file”

在 Target > > Get Info 下面还有许多其他属性可能会影响到您。寻找像优化或压缩代码这样的事情,然后关闭这些东西(我假设您正在调试模式下工作,这样这个建议就不错了)。此外,寻找像剥离符号的东西,并确保这也是关闭的。例如,“ Strip Linked Product”应该为 Debug 目标设置为“ No”。

我还没有做过一点 Xcode,但是我建议您禁用“ Zerolink”和“ LoadSymblsLazily”; 这将解决大多数问题。反正 Zerolink 是个令人憎恶的东西。

Xcode 的分界点似乎有三个州。如果你点击他们,他们将通过不同的设置。深蓝色是启用的,灰色是禁用的,我看到一个淡蓝色,有时需要我再次点击断点,让它去深蓝色。

除此之外,请确保使用 debug 命令而不是 run 命令启动它。您可以通过点击选项 + 命令 + 返回,或者点击运行菜单中的 Go (debug)选项来实现。

Xcode (2.4.1)中的断点有很多问题。我使用的项目只包含其他项目(如 VisualStudio 中的解决方案)。我发现有时候断点根本无法工作,除非在开始的项目中至少设置了一个断点(即包含代码入口点的断点)。如果仅有的断点位于“低级”项目中,它们就会被忽略。

似乎 Xcode 只有在包含断点所在的源代码行的项目中对断点进行操作时才能正确处理断点操作。

如果我尝试通过另一个项目删除或禁用断点,有时该操作不会生效,即使调试器指出它已经生效。因此,我将发现自己在禁用的断点上中断,或在之前删除的(现在不可见的)断点上中断。

我相信一个项目也可能因为断点而损坏。我有一个项目,例如,不会打破任何断点,它记得从上一个会议。我第一次写这个 给你

我有我的断点不工作,然后建立/清理所有目标让他们再次工作。

还要确保应用程序的 AppStore 发行版没有同时安装在设备上。

我只是(又)遇到了同样的问题。在三次检查“惰性加载符号”和剥离和调试信息生成标志之后,我做了以下操作:

  1. 退出 Xcode
  2. 打开一个终端窗口和 cd 到项目目录
  3. Cd 到. xcodeproj 目录
  4. 删除除了. pbxproj 文件之外的所有内容(我有 frank.mode1v3和 frank.pbxuser)

您可以在 finder 中通过右键/选项-单击. xcodeproj 包并选择“ Show Package Content”来完成相同的任务。

当我重新启动 Xcode 时,我所有的窗口都重置为默认位置等等,但是断点工作了!

另一件需要检查的事情是,如果您的调试模式有一个“ Entitments”plist 文件(可能是因为您正在使用 Keychain 进行操作) ,请确保该 plist 文件具有“ get-task-allow”= YES 行。没有它,调试和日志记录就会中断。

看看这篇文章: 断点在 Xcode 不起作用?。您可能正在按“ Run”而不是“ Debug”,在这种情况下,您的程序没有在 gdb 的帮助下运行,在这种情况下,您不能期望断点能够工作!

我有 Xcode 3.2。3 SDK 4.1断点将随机失败。我已经发现,如果你清理的构建和使用在编译触摸命令,他们再次工作。

下面是我遇到的一个不明显的问题: 如果你正在使用一个共享库(或者插件) ,你的断点在启动时会变黄,这可能会导致你的键盘受挫并终止调试过程。别这样!在应用程序加载库之前,不会加载这些符号,此时断点将变得有效。我在浏览器插件上遇到了这个问题... ... BP 被禁用了,直到我浏览到一个实例化了我的插件的页面。

当我想调试一个自定义可执行文件为 Safari 5.1的 web 插件时,我也遇到了同样的问题。 在我把 Safari 从4.0.5升级到5.1之前,它一直运行良好。 重新安装 Safari 4.0.5之后,所有断点在不修改任何 Xcode 设置的情况下开始工作。

我认为问题可能是设备版本和 Xcode 之间的不兼容性。当我试图在运行 iOS5.0.1的 iPhone4S 上进行调试时,我遇到了这个问题。我仍然在使用 Xcode 3.2.5。我得到的符号从手机选择“使用此设备开发”在组织者窗口。然而,这部手机拒绝断点。我的旧3GS 威尔断点,同样的 Xcode 项目,同样的设置... 只是不同的设备,它运行 iOS 4.0。我猜这是3.2.5中的 Xcode 错误,因为我有这些符号。在尝试了这里发布的所有解决方案之后,我决定我的问题的解决方案是继续并升级到 XCode4。也许您无法有效地进行调试,除非您的基 SDK 至少与要进行调试的系统一样高。也许这很明显,有人能证实吗?

编辑: 我会更新时,我可以确认这是真的。

对于 Xcode 4.x: Goto Product > Debug Workflow 并取消选中“调试时显示反汇编”。

对于 Xcode 5. x Goto Debug > Debug Workflow 并取消选中“调试时显示反汇编”。

在 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

如果使用 subversion,只需将项目文件(只有)恢复到最后一次知道调试器正在工作的时间。

刚刚在 XCode 4.2中解决了这个问题,以上都没有帮助。问题是(我不确定实际发生了什么,但是,也许这对某人有帮助) : 我的队友在 SVN 中创建了新的构建配置和更新的项目。我在 Run Scheme 设置中设置了旧的构建配置,因此我的步骤是:

  1. 产品-> 编辑计划..。
  2. 选择“ Run% project _ name. app%”(或其他导致问题的选项)
  3. 在构建配置组合中,从我的队友那里选择新的构建配置

就是这样,断点又回来了。希望这有所帮助。

断点可能变为黄色的另一个原因是,您正在调试的应用程序二进制文件自首次运行以来已被修改。在我的示例中,在调试了程序一次之后,我将一个文件夹添加到应用程序的 Content/Resources 文件夹中。在添加文件夹后的调试运行中,断点变成黄色并被忽略。我修改了我的过程: 我做了一个清理、构建、添加文件夹,然后运行,一切都很好。

也许 Xcode (或 OS X)创建并记住它自己的应用程序数字签名(这是 没有数字签名) ,然后感觉到应用程序被修改,拒绝尝试设置断点。通过在应用程序第一次(调试)运行之前制作我的 mods,数字签名被制作成 我的 mods。

所有这些都是在 OS X 10.6.8上使用 Xcode 3.2.2完成的。

对于 Xcode 4:

go Product -> Debug ->  Activate Breakpoints

这适用于所有的 Xcode 版本。快捷键是: command key + Y.按下这个组合键来激活/取消断点。

您可以在目标设置 AppleLLVM 编译器4.1代码生成部分检查一个设置 生成调试符号 = YES

我有 Xcode Version 4.6.3,断点从未在包含项目的子组中工作过。这个项目可以很好地编译和运行; 它甚至可以附加到调试器并适当地输出 NSLog 输出。

这个问题与我的头部搜索路径有关。我将其中一些设置为“递归”,而不是默认的“非递归”。将它们全部更改为“非递归”并适当地更新所有相关的导入,从而解决了这个问题。

至少在 iOS 项目中,这种情况时有发生。为了解决这个问题,我不得不重新启动 iOS 设备,退出 Xcode,重建项目。

我找到问题所在了。不知怎么的,我的 XCode 中启用了“ 调试时显示反汇编”,这就造成了这个问题。当我禁用它时,所有调试器都停在了源代码中。

在调试时,可以在: Product->Debug Workflow->Show Disassembly下找到它。

您可以在下拉菜单中激活/禁用断点 enter image description here

同时使用 Xcode 5和6 GM 会导致前者失去断点功能(Xcode 6 beta 是可以的)。

我尝试了许多建议的方法,但最终放弃了,我现在只使用 Xcode 6。

来到这个页面时遇到了同样的问题(Xcode 6中的 c 代码没有在断点处停止) ,上面的解决方案都没有起作用(这个项目实际上已经开箱即用了,设置明智,所以任何调试器设置被设置为错误值的可能性都很小)。

在浪费了相当多的时间来减少这个问题之后,我终于找到了罪魁祸首(对于我的代码而言) :

Xcode (/LLVM)不喜欢 Bison 风格的 #line预处理器命令。

删除它们修复了问题(调试器在我的断点处停止)。

删除“生成”文件夹为我解决了这个问题。

对于这个,以及 Xcode 6和更高版本,确保断点状态按钮被激活(蓝色箭头状按钮) :

enter image description here

如果所有其他方法都失败,可以调用以下函数而不是断点:

void BreakPoint(void) {
int i=1;
#if !__OPTIMIZE__
printf("Code is waiting; hit pause to see.\n");
while(i);
#endif
}

要恢复,手动将 i 设置为零,然后点击恢复按钮。

在 XCode6.3.1中,同样的事情也发生在我身上。 我设法解决了这个问题:

  • 转到 视图-> 导航器-> 显示调试导航器
  • 右键单击 项目 root-> 移动断点(如果选择了 User 选项)
  • (我还选择了选项 股票中断点,尽管我不确定这是否必要)。

在做了这个更改之后,我将 移动断点选项设置回项目,取消选择 股票断点选项,并且仍然可以工作。

我也不知道为什么,但这个能让我的断点回来。

在 Xcode 6.4上,我需要重启我的 Mac。

(尝试启用/禁用断点,重新启动 iOS 设备,重新启动 Xcode,从工作区包中删除断点文件...)

我曾经遇到过 Xcode 在使用模拟器时丢失断点的问题,并且 Scheme Launch 设置为“等待可执行文件”。将其更改为“自动启动”,断点将恢复生命。

另一个原因

在 BuildSettings 中将 DeploymentPostprocessing设置为 NO-详情请浏览此网页

简而言之 -

激活此设置表示应删除二进制文件,并且 文件模式、所有者和组信息应设置为标准 [ DEPLOYMENT _ POSTPROCESSING ]

enter image description here

在 Xcode 7中,对我有效的是:

  1. 确保 Target > Scheme > Run-处于调试模式(已发布)

  2. 请确保选中“ Debug Executive”选项:

Debug executable

在我的例子中,我发现断点被意外地停用了。您可以通过 调试-> 激活断点[ Cmd + Y ]。重新激活它如果您注意到灰色的断点标记,而不是通常的蓝色标记,这是可能的情况。

事实证明,您总是可以用 Cmd + Y 键切换断点激活,您可能会点击这个组合键而没有注意到它。本报告基于 Xcode 7.2。

可以尝试的事情:

1)重新启动 xcode 2)选择另一个模拟器——这就是我的案例 3)重启 Mac。

如果这些都不起作用。那么看看项目设置。(这是最不可能的事情。)

我也有过类似的问题。我重新安装了 xcode。这解决了我的问题

我尝试了以上所有的方法,但是对我来说,只有一次关闭调试断点,然后激活它们才能正常工作。

这让我在 Xcode 9中度过了令人沮丧的半天,结果是一个简单的调试设置。

调试 > 调试工作流,并确保“总是显示反汇编”关闭

使用 XCode9.4.1(没有在任何断点停止)为我提供的解决方案:

在构建目标-> 构建设置-> 优化级别: 从“优化速度”-> “没有优化”(现在它的速度较慢,但工作)切换

其中一个可能的解决方案是... . 转到 Product > Scheme > Edit Scheme > . . Under Run > info > Executable 检查“调试可执行文件”。

在我的例子中,解决这个问题的方法很简单,在 Xcode-Product-Clean Build Folder,然后是 Product-Run (不是 Play x code 按钮)。

(在切换到 Xcode 播放按钮长按单元测试后,Xcode 11-beta 4出现了问题)

当我将 xCode 更新到 Version 11.0(11A420a)时,我开始遇到这个问题。 为了解决这个问题,我安装了额外的模拟器版本12.2,并将我的 iPhone 版本升级到了13.1。 现在 iOs 模拟器和我的设备都被击中了。

在我的例子中,我用我的构建覆盖了现有的应用程序商店构建。我删除了同样的东西,现在它可以工作了。

如果你使用 Xcode Version 11.1(11A1027) ,请确保你没有使用应用商店凭证(配置文件) ,因为在这种情况下,将安装构建,没有日志或调试器将工作,我花了很多时间才弄清楚,更新的 Xcode 已经改变。现在构建在没有任何警告的情况下安装在设备上。

问题

  • 背景资料
    • Xcode: 13.0
      • 密码: Objective-C
  • 问题: 添加了断点,但没有工作
    • enter image description here

(可能的)原因和解决办法

  • 原因 : Xcode bug
    • 解决方案 : Product-> Clean Build Folder,然后重试调试(多次)
      • enter image description here
  • 原因 : 禁用调试
    • 解决方案 : 启用: Product-> Scheme-> Edit Scheme-> Run-> Info
      • Build Configuration设置为 Debug
      • 选择/选择/启用: Debug executable
      • enter image description here
  • 原因 : 禁用所有断点
    • 解决方案 : 启用它: 调试面板-> 单击断点图标
      • enter image description here
  • 原因 : 调试信息被优化
    • 解决方案 : 不优化
    • 点击 Project-> Build Settings-> Apple Clang - Code Generation-> Optimization Level-> Debug确保是 None[-O0]
      • enter image description here

相关

XCode 的符号断点不起作用

  • 背景资料

XCode 崩溃日志

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFConstantString stringByAppendingString:]: nil argument'

添加 XCode 符号断点

-[__NSCFConstantString stringByAppendingString:]:

但是断点不起作用

  • 解决方案

改为:

-[NSString stringByAppendingString:]

相关文件: 字符串:

对于那些面临问题的迅速包和断点不工作。问题是 targetpath属性的 大小写敏感性

screenshot of package path

路径设置为 source,一旦设置为 Source,问题就修复了

在我的例子中,断点会自动关闭,因为我将它们放入的函数是 二等兵,它们不可用,也从不调用。检查 接达水平