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

问题描述 投票:92回答:46

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

xcode breakpoints
46个回答
137
投票

首先,我同意100%与之前说过关闭Load 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”。


4
投票

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

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


3
投票

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

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


2
投票

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

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

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


2
投票

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


2
投票

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

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


2
投票

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


2
投票

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


2
投票

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


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

1
投票

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

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


30
投票

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

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

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

enter image description here


1
投票

您可以在下拉菜单中激活/取消激活断点


1
投票

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

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

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


1
投票

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

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

执行该更改后,我将Move breakpoints选项设置回项目,并取消选择Share breakpoints选项,仍然有效。

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


1
投票

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


0
投票

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

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

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


0
投票

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


0
投票

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


0
投票

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

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


0
投票

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


0
投票

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


25
投票

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


0
投票

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


14
投票

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

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

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

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


12
投票

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

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


8
投票

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


7
投票

另一个原因

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

简而言之 -

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

enter image description here


4
投票

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

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

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

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


4
投票

对于Xcode 4:

go Product -> Debug ->  Activate Breakpoints
© www.soinside.com 2019 - 2024. All rights reserved.