it-swarm.cn

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

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

92
AlanKley

首先,我同意100%与前面说过转OFFLoad Symbols Lazily的人。

我还有两件事要补充。

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

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

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

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

135
pestophagous

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

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

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

enter image description here 

28
Oded Regev

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

25
AlanKley

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

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

您可以通过右键/选项单击.xcodeproj包并选择“显示包内容”,在Finder中完成相同的任务。

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

14
Frank Szczerba

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

对于Xcode 5.x转到Debug> Debug Workflow并取消选中“Show Debuging时显示反汇编”。

12
bneupaane

看到这篇文章: 断点不能在Xcode中工作? 。您可能正在推“运行”而不是“调试”,在这种情况下,您的程序没有在gdb的帮助下运行,在这种情况下,您不能指望断点工作!

8
Soong

另一个原因

在BuildSettings中将DeploymentPostprocessing设置为NO - 此处的详细信息

简而言之 -

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

enter image description here 

7
gbk

对于Xcode 4:

go Product -> Debug ->  Activate Breakpoints
4
evya

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

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

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

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

4
Dave

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

Go Debug> Debug Workflow并确保关闭'Always Show Disassembly'。就那么简单。 :(

3
Gaz Long

使用XCode 9.4.1解决方案(在任何断点处都没有停止):

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

3
Strinder

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

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

2
Gavin

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

2
Jack Bellis

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

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

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

2
Charles Anderson

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

2
snowytree

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

enter image description here

2
df611

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

1
Soropromo

在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
1
brian.clear

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

1
user8032120

 enter image description here

1
Stan

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

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

1
Perumal

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

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

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

1
William Jockusch

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

  • 转到 View-> Navigators-> Show Debug Navigators
  • 右键单击 项目根目录 - >移动断点 (如果选择了用户选项)
  • (我也选择了选项 分享断点 ,即使我不确定是否有必要)。

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

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

1
Osk

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

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

0
user2067021

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

0
stephen

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

0
Tim Keating

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

0
kakyo

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

0
dan

如果您尝试了所有基本检查,请在项目目标和项目设置中检查 优化级别 。确保为调试选择了None。

enter image description here 

0
Abhijith Purushothaman

我在使用模拟器并让Scheme Launch设置为“等待可执行文件”时,Xcode丢失了断点。将其更改为“自动启动”,断点恢复生机。

0
Richard

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

0
davidcann

我相信一个项目在断点方面也会被破坏。例如,我有一个项目,它不会在上次会话中记得的任何断点上中断。我第一次写了这个 这里

0
AlanKley

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

0
user917691

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

0
Damon McGIll

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

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

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

0
user532477

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

  1. 产品 - >编辑方案......
  2. 选择“运行%project_name.app%”(或任何导致问题的原因)
  3. 在构建配置组合中,从我的队友中选择新的构建配置

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

0
MANIAK_dobrii

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

0
duane

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

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

0
crackity_jones

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

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

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

0
Scott Swezey

同时拥有Xcode 5和6 GM会导致前者失去断点功能(Xcode 6测试版可以)。

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

0
Rivera

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

0
Pushan

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

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

0
Benny Khoo

如果是 Xcode 4及更高版本 * 懒惰地加载符号 *似乎是 被丢弃 。所以请参考这篇文章 点击这里

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

0
Ajit Satarkar