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


112

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


2
产品清洁帮助了我
Alexander Bekert'4


我必须完全重新启动计算机才能使它们重新工作,现在它们正处于超级越野车状态。我正在使用xcode 10.2.1。
llamacorn

2
Xcode 11,重新启动并清理Xcode不起作用,重新启动Mac不起作用。删除设备上的应用程序,然后重建即可解决此问题。希望这有助于有人
兰德尔王

Answers:


148

首先,我100%同意较早前说过OFF的人 Load Symbols Lazily

我还有两件事要补充。

(我的第一个建议听起来很明显,但是当有人第一次向我建议时,我的反应是这样的:“来吧,请,您真的以为我不会更好……哦。”)

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

  2. 在项目的图形树显示中的“目标”下,右键单击目标并执行“获取信息”。查找名为“ Generate Debug Symbols”(或类似名称)的属性,并确保已选中该属性(也称为“ ON”)。另外,您可以尝试查找(也在Target >> Get Info中)名为“ Debug Information Format”的属性,并将其设置为“带有dsym文件的小矮人”。

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


8
在XCode 4.5.2上,我遇到了这个问题,原来是因为我启用了“链接时间优化”,所以这是另一件事需要检查
taxilian 2012年

6
要更改构建配置,请在运行-信息下转到产品->方案->编辑方案。对我来说,有效的方法是在该菜单中检查“ Debug Executable”。
Jeffrey Sun

2
劫持最佳答案以补充说Bison语法似乎是断点不起作用的另一个(特殊的)原因(请参阅下面的我的答案)。希望可以为下一个遇到这个问题的人节省一些时间。
戴夫

2
意外地使用⌘Y切换断点激活也非常容易。所以要小心,孩子们。
dsgrnt 2014年

1
我尝试了第一点,它对我有用。真的帮了我 已投票。
NSPratik

49

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

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

2)确保检查选项“调试可执行文件”,如下所示:

在此处输入图片说明


4
这正是发生在我身上的事情,未选中复选框
anoop4real

对我来说也是一样。默认情况下不应该启用该选项(XCode 8.3)吗?我们不是应该都是愿意调试的开发人员吗?
dgmz

在Xcode 9.3工作对我来说,如果你的选项1.提供另一个图像将是巨大的
卡齐·阿卜杜拉·马蒙

24

转到“ Xcode调试”首选项。确保未选择“延迟加载符号”。


7
不幸的是,Xcode 6中没有“调试”首选项,并且“懒惰”没有出现在文档中。叹。
奥斯卡

1
好吧,现在我在XCode 6
RNA

14

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

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

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

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


2
此方法有效,但是会删除您的所有首选项...当其他方法无效时,应执行此操作。
雷米Doolaeghe

为我工作,谢谢。我不知道为什么Xcode很烂。Xcode是Apple编写过的最糟糕的软件。
鸭子

哇,那是5岁。很难相信它仍然有效,这仍然是一个问题!
Frank Szczerba 2014年

没有为我工作。我正在运行Xcode 6.01。现在,在构建时,我会收到多个丢失的文件错误。我正在还原代码以进行解决。
Native_Mobile_Arch_Dev 2014年

只需重新启动Xcode,我的情况是由于在提交xcode用户界面状态数据时使用git版本控制。
Juan Boero '16

13

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

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


11

另一个原因

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

简而言之 -

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

在此处输入图片说明


更新到XCode 7后,此设置YES只在我中subproject可用,然后断点在中不起作用subprojects。设置为之后NO,非常完美!
Maheswaran Ravisankar

这仅在清理项目后对我有用,因此将进行全面重建。
2013年

8

看到这篇文章:断点不能在Xcode中工作?。在这种情况下,您的程序可能无法在gdb的帮助下运行,因此您可能会推“ Run”而不是“ Debug”,在这种情况下,您不能指望断点起作用!


在Xcode 6.4中,现在只有一个“运行”按钮,它是否运行调试配置取决于当前选择的方案设置。
user2067021

6

可能的解决方案之一是....转到“产品”>“方案”>“编辑方案”> ..在“运行”>“信息”>“可执行”中选中“调试可执行文件”。


敲了我头两天后,这对我有用。
Dileep Perla

很高兴它有所帮助。
Soropromo

5

这让我在Xcode 9中呆了半天。最终它是一个简单的调试设置。

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


这确实对我
有用

5

XCode 9.4.1为我提供的解决方案(没有在任何断点处停止):

在构建目标下->构建设置->优化级别:从“优化速度”->“无优化”(现在比较慢,但是可以使用)


5

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

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


4

来到此页面时遇到了同样的问题(Xcode 6中的C代码没有在断点处停止),并且上述解决方案均无效(该项目实际上是开箱即用的,从设置角度来说,调试器设置几乎没有机会进行设置)设置为错误的值)...

在浪费大量时间减少问题之后,我终于找到了罪魁祸首(针对我的代码):

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

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


4

对于Xcode 4:

go Product -> Debug ->  Activate Breakpoints

谢谢!这有所帮助。我本来打算自己张贴这个帖子,显然是我以某种方式错误地推了⌘Y。
Ovi)

2

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

当您在包含断点所在的源代码行的项目中操作断点时,似乎Xcode也只能正确处理断点操作。

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


2

我的断点无法正常工作,然后完成“构建/清理所有目标”以使其重新工作。


2

我认为问题可能出在设备版本和Xcode之间不兼容。尝试在运行iOS 5.0.1的iPhone 4S上进行调试时遇到此问题。我仍在使用Xcode 3.2.5。通过在管理器窗口中选择“使用此设备进行开发”,我从听筒中获得了符号。但是此电话拒绝断点。我以前的3GS 断点,相同的Xcode项目,相同的设置...只是不同的设备,并且它正在运行iOS 4.0。我猜这是3.2.5中的Xcode错误,因为我有符号。到目前为止,已经尝试了这里发布的所有解决方案,我已经决定解决我的问题的方法是继续升级到XCode4。也许您不能有效地调试,除非您的基本SDK至少与要调试的系统一样高。也许很明显-有人可以确认吗?

编辑:当我可以确认这是真的时,我将进行更新。



2

为此,对于Xcode 6及更高版本,请确保已激活断点状态按钮(类似蓝色箭头的按钮):

在此处输入图片说明


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调试时。



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中,对我来说发生了同样的事情。我设法通过以下方式修复它:

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

进行更改后,我将“ 移动断点”选项设置回项目,并取消选择“ 共享断点”选项,仍然可以使用。

我不完全知道为什么,但是这使我的断点恢复了。


1

我尝试了上述所有操作,但对我而言,只停用一次调试断点,然后将其激活即可。


@IshantMrinal为什么这不相关?用户提供了适用于他的方案的答案。
Noel Widmer

0

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

另外,请确保未在调试首选项中选择“延迟加载符号”。

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


0

另外,请确保该应用程序的AppStore分发版本也未安装在设备上。


0

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


0

Xcode中的断点似乎有3种状态。如果单击它们,它们将进行不同的设置。启用了深蓝色,禁用了灰色,有时我会看到浅蓝色,这需要我再次单击断点才能使其变为深蓝色。

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


0

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


0

这是我遇到的一个晦涩的问题:如果您正在使用共享库(或插件),则断点将在启动时变黄,这可能会使您感到沮丧,从而破坏调试过程。好吧,不要那样做!在应用程序加载库之前,不会加载符号,此时断点将变为有效。我在浏览器插件中遇到了这个问题... BP被禁用,直到浏览到实例化插件的页面为止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.