为什么我的断点不起作用?

时间:2008-09-15 17:10:27

标签: xcode breakpoints

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

50 个答案:

答案 0 :(得分:135)

首先,我同意100%与之前说过 OFF Load Symbols Lazily的人。

我还有两件事需要补充。

(我的第一个建议听起来很明显,但有人第一次向我提出建议时,我的反应就是这样:“来吧,拜托,你真的觉得我不会更清楚......哦。 “)

  1. 确保您没有意外将“Active Build Configuration”设置为“Release”。

  2. 在项目的图形树显示中的“目标”下,右键单击目标并执行“获取信息”。查找名为“Generate Debug Symbols”(或类似)的属性,并确保这是CHECKED(也称为ON)。此外,您可以尝试查找(也在Target>>获取信息中)一个名为“调试信息格式”的属性,并将其设置为“使用dsym文件的Dwarf”。

  3. 目标>>下有许多其他属性获取可能会影响您的信息。寻找诸如优化或压缩代码之类的东西并将其关闭(我假设您正在调试模式,因此这不是坏建议)。此外,寻找剥离符号之类的东西,并确保它也是OFF。例如,对于Debug目标,“Strip Linked Product”应设置为“No”。

答案 1 :(得分:29)

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

1)确保目标 - >方案 - >运行 - 处于调试模式(发布)

2)确保选中“Debug executable”选项,见下文:

enter image description here

答案 2 :(得分:25)

转到Xcode调试首选项。 确保未选中“懒惰加载符号”。

答案 3 :(得分:14)

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

  1. 退出Xcode
  2. 打开终端窗口并cd到项目目录
  3. cd进入.xcodeproj目录
  4. 删除.pbxproj文件以外的所有内容(我有frank.mode1v3和frank.pbxuser)
  5. 您可以通过右键/选项单击.xcodeproj包并选择“显示包内容”,在Finder中完成相同的任务。

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

答案 4 :(得分:12)

对于Xcode 4.x:    转到产品>调试工作流程并取消选中“调试时显示反汇编”。

对于Xcode 5.x    转到调试>调试工作流并取消选中“调试时显示反汇编”。

答案 5 :(得分:8)

请参阅此帖:Breakpoints not working in Xcode?。您可能正在推“运行”而不是“调试”,在这种情况下,您的程序没有在gdb的帮助下运行,在这种情况下,您不能指望断点工作!

答案 6 :(得分:7)

另一个原因

在BuildSettings中将DeploymentPostprocessing设置为NO - details here

简而言之 -

  

激活此设置表示应删除二进制文件   文件模式,所有者和组信息应设置为标准   值。 [DEPLOYMENT_POSTPROCESSING]

enter image description here

答案 7 :(得分:4)

来到这个页面遇到同样的问题(Xcode 6中的C代码没有在断点处停止)并且上述解决方案都没有工作(该项目实际上是开箱即用的,设置方面,所以几乎没有任何机会调试器设置被设置为错误的值)...

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

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

删除它们解决了问题(调试器在断点处停止)。

答案 8 :(得分:4)

对于Xcode 4:

go Product -> Debug ->  Activate Breakpoints

答案 9 :(得分:3)

在我的情况下,解决该问题的方法非常简单,在Xcode-产品-清洁生成文件夹中,然后在Product-Run中(不是“播放Xcode”按钮)。

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

答案 10 :(得分:3)

使用XCode 9.4.1为我解决的方法(没有在任何断点处停止):

在构建目标下->构建设置->优化级别: 从“优化速度”->“无优化”(现在变慢了,但可以运行)

答案 11 :(得分:3)

这让我在Xcode 9中度过了令人沮丧的一天。它最终是一个简单的调试设置。

Go Debug>调试工作流程并确保“始终显示反汇编”已关闭。就那么简单。 :(

答案 12 :(得分:2)

为此,以及Xcode 6及更高版本,确保断点状态按钮被激活(蓝色箭头状按钮):

enter image description here

答案 13 :(得分:2)

删除我的Build文件夹解决了我的问题。

答案 14 :(得分:2)

我认为问题可能是设备版本和Xcode之间不兼容。尝试在运行iOS 5.0.1的iPhone 4S上进行调试时遇到此问题。我还在使用Xcode 3.2.5。我在“管理器”窗口中选择“使用此设备进行开发”,从手机中获取符号。然而,这款手机拒绝断点。我的旧3GS 断点,相同的Xcode项目,相同的设置......只是不同的设备,它正在运行iOS 4.0。我想这是3.2.5中的Xcode错误,因为我有符号。尝试了到目前为止发布的所有解决方案,我已经确定我的问题的解决方案是继续升级到XCode 4.除非您的基本SDK至少与要调试的系统一样高,否则您无法进行有效调试。也许这很明显 - 任何人都可以确认吗?

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

答案 15 :(得分:2)

我的断点不起作用,然后完成Build / Clean All Targets让它们重新工作。

答案 16 :(得分:2)

我在Xcode(2.4.1)中遇到了很多断点问题。我使用的项目只包含其他项目(如Visual Studio中的解决方案)。我发现有时断点根本不起作用,除非在起始项目中设置了至少一个断点(即包含我的代码入口点的断点)。如果唯一的断点位于“低级别”项目中,则会被忽略。

如果你在包含断点所在的源代码行的项目中对断点起作用,那么Xcode似乎只能正确处理断点操作。

如果我尝试通过另一个项目删除或禁用断点,则该操作有时不会生效,即使调试器指示它有。所以我会发现自己打破了禁用的断点,或者我之前删除的(现在看不见的)断点。

答案 17 :(得分:1)

这可能是发生这种情况的可能原因之一。...转到“产品”>“方案”>“编辑方案”> ..“正在运行”>“信息”>“可执行文件” 检查“调试可执行文件”。

答案 18 :(得分:1)

在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 :(得分:1)

我尝试了以上所有方法,但对我来说,只调试一次调试断点,然后激活它们。

答案 20 :(得分:1)

如果所有其他方法都失败了,您可以调用以下函数代替断点:

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

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

答案 21 :(得分:1)

在XCode 6.3.1中,我发生了同样的事情。 我设法修复它:

  • 转到查看 - >导航器 - >显示调试导航器
  • 右键单击项目根目录 - >移动断点(如果选择了“用户”选项)
  • (我也选择分享断点选项,即使我不确定是否有必要)。

完成更改后,我将移动断点选项设置回项目,并取消选择共享断点选项,仍然有效。

我不知道为什么会这样,但这会让我的断点回来。

答案 22 :(得分:1)

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

答案 23 :(得分:1)

我发现了问题。不知何故,在我的XCode中启用了“在调试时显示反汇编”,这会产生该问题。当我禁用它时,我的所有调试器都停在我的源代码中。

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

答案 24 :(得分:0)

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

答案 25 :(得分:0)

如果您使用的是Xcode版本11.1(11A1027),请确保您未使用应用商店凭据(供应配置文件),因为在这种情况下,将安装build,并且没有日志或调试器将起作用,这使我花了很多时间为了弄清楚,更新的Xcode已被淘汰。现在可以在没有任何警告的情况下将其安装到设备上。

答案 26 :(得分:0)

就我而言,我是用我的构建覆盖现有的应用商店构建。我删除了它,并且现在可以正常工作。

答案 27 :(得分:0)

将我的xCode更新为版本11.0(11A420a)后,我已经开始遇到此问题。 为了解决这个问题,我安装了附加的模拟器版本12.2,并将我的iPhone版本更新为13.1。 现在,无论是在iOs模拟器上还是在我的设备断点上,都受到打击。

答案 28 :(得分:0)

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

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

答案 29 :(得分:0)

在使用模拟器并将方案启动设置为"等待可执行文件时,我遇到了Xcode丢失断点的问题。将其更改为"自动启动"和断点恢复了生机。

答案 30 :(得分:0)

如果您尝试了所有基本检查,请检查项目目标和项目设置中的优化级别。确保选择“无”进行调试。

enter image description here

答案 31 :(得分:0)

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

事实证明,您始终可以使用Cmd + Y键激活断点激活,您可能会点击此组合键而不会注意到它。该报告基于Xcode 7.2。

答案 32 :(得分:0)

当我想调试自定义可执行文件是Safari 5.1的Web插件时,我遇到了同样的问题。 它工作正常,直到我的Safari从4.0.5升级到5.1。 一旦我再次安装了Safari 4.0.5,所有断点都开始工作而不修改任何Xcode设置。

答案 33 :(得分:0)

设置断点时,右键单击,您应该获得有关如何处理断点的几个选项(记录变量并继续,暂停执行等)

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

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

答案 34 :(得分:0)

我还没有完成Xcode,但我建议您禁用“Zerolink”和“Lazily加载符号”;这将解决大多数问题。无论如何,Zerolink是一个可憎的人。

答案 35 :(得分:0)

Xcode中的断点似乎有3种状态。如果您点击它们,它们将经历不同的设置。暗蓝色已启用,灰色显示已禁用,我看到有时会出现淡蓝色,需要我再次点击断点才能使其变为深蓝色。

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

答案 36 :(得分:0)

我认为项目在断点方面也可能会被破坏。例如,我有一个项目,它不会在上次会话中记得的任何断点上中断。我首先写了关于这个here

的文章

答案 37 :(得分:0)

还要确保该应用的AppStore发行版未安装在设备上。

答案 38 :(得分:0)

要检查的另一件事是,如果您的调试模式有一个“Entitlements”plist文件(可能是因为您正在使用Keychain进行操作),请确保plist文件具有“get-task-allow”=是行。没有它,调试和日志记录将被破坏。

答案 39 :(得分:0)

我有Xcode 3.2.3 SDK 4.1断点会随机失败。我发现如果你清理构建并在构建下使用touch命令它们再次工作。

答案 40 :(得分:0)

这是我遇到的一个模糊不清的问题:如果您正在使用共享库(或插件),您的断点将在启动时变黄,这可能会导致您挫败键盘并终止调试处理。好吧,不要那样做!在应用程序加载库之前,符号不会加载,此时断点将变为有效。我用浏览器插件遇到了这个问题...... BP被禁用,直到我浏览了一个实例化我的插件的页面。

答案 41 :(得分:0)

同时拥有Xcode 5和6 GM会导致前者丢失断点功能(Xcode 6测试版没问题)。

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

答案 42 :(得分:0)

如果您使用的是subversion,只需将项目文件()还原到您上次知道调试器工作的时间。

答案 43 :(得分:0)

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

  1. 产品 - >编辑方案......
  2. 选择“运行%project_name.app%”(或导致任何问题)
  3. 在构建配置组合中,从我的队友中选择新的构建配置
  4. 就是这样,断点又回来了。希望这会有所帮助。

答案 44 :(得分:0)

断点可以变为黄色的另一个原因是,自首次运行以来,您正在调试的应用程序二进制文件是否已被修改。就我而言,在调试程序一次后,我在应用程序的Contents / Resources文件夹中添加了一个文件夹。在添加文件夹后的调试运行中,断点变为黄色并被忽略。我修改了我的程序:我做了一个干净的,一个构建,添加了文件夹,然后运行,一切都很好。

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

所有这些都在OS X 10.6.8上使用Xcode 3.2.2。

答案 45 :(得分:0)

如果 Xcode 4及更高版本 * 懒洋洋地加载符号 *似乎已弃用。请参阅此帖click here

简单而详细的解释对我有用。

答案 46 :(得分:0)

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

答案 47 :(得分:-1)

我有Xcode版本4.6.3,断点从未在包含项目的子组中工作。该项目将编译并运行良好;它甚至会附加到调试器并适当地吐出NSLog输出。

该问题与我的标头搜索路径有关。我有一些设置'递归'而不是默认的'非递归'。将它们全部更改为“非递归”并更新所有相关导入,可以正确解决问题。

答案 48 :(得分:-3)

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

答案 49 :(得分:-3)

要尝试:

1)重启xcode 2)选择另一个模拟器 - 这是我的情况 3)重启mac。

如果这些都不起作用。然后看项目设置。 (这是可能的东西。)