首页 / 知识

关于xcode:为什么我的断点不起作用?

2023-04-15 11:24:00

Why aren't my breakpoints working?

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


首先,我与100%的人说过将Load Symbols Lazily设为OFF。

我还有两件事要补充。

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

  • 确保您没有意外地将" Active Build Configuration"设置为" Release"。

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

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


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

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

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

    enter image description here


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


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

  • 退出Xcode
  • 打开一个终端窗口并cd到项目目录
  • cd进入.xcodeproj目录
  • 删除除.pbxproj文件以外的所有内容(我有frank.mode1v3和frank.pbxuser)
  • 您可以通过右键/选项单击.xcodeproj捆绑包并选择"显示包内容"来在finder中完成相同的任务。

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


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

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


    另一个原因

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

    简而言之 -

    Activating this setting indicates that binaries should be stripped and
    file mode, owner, and group information should be set to standard
    values. [DEPLOYMENT_POSTPROCESSING]

    enter image description here


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


    可能的解决方案之一可能是....转到"产品">"方案">"编辑方案"> .."在运行下">"信息">"可执行文件"
    检查"调试可执行文件"。


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

    在构建目标->构建设置->优化级别下:
    从"优化速度"->"无优化"切换(现在速度较慢,但??可以运行)


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

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


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

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


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

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

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

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


    对于Xcode 4:

    1
    go Product -> Debug ->  Activate Breakpoints

    在XCode 6.3.1中,对我来说发生了同样的事情。
    我设法通过以下方式修复它:

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

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

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


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

    1
    2
    3
    4
    5
    6
    7
    8
    void BreakPoint(void) {
        int i=1;
        #if !__OPTIMIZE__
        printf("Code is waiting; hit pause to see.\
    ");
        while(i);
        #endif
    }

    要继续播放,请手动将i设置为零,然后点击继续播放按钮。


    删除我的Build文件夹可以为我解决问题。


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

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


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


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

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

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


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

    enter image description here


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


    在Xcode 4中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - 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

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


    我发现了问题。在我的XCode中启用了"调试时显示反汇编"功能,从而造成了该问题。当我禁用它时,所有调试器都停止在源代码中。

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


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

    还要确保在调试首选项中未选择"延迟加载符号"。

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


    当我要调试自定义可执行文件为Safari 5.1的Web插件时,我遇到了同样的问题。
    在将Safari从4.0.5升级到5.1之前,它一直运行良好。
    再次安装Safari 4.0.5后,所有断点都开始工作,而无需修改任何Xcode设置。


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


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


    我没做过Xcode,但是我建议您禁用" Zerolink"和"懒惰地加载符号";可以解决大多数问题。无论如何,Zerolink是可憎的。


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


    至少在iOS项目中有时会发生这种情况。要修复它,我必须重新启动iOS设备,退出Xcode,然后重建项目。


    我认为,就断点而言,一个项目也可能会遭到破坏。例如,我有一个项目,该项目不会在上次会话记住的任何断点处中断。我首先在这里写了这个


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


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

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


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

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


    以我为例,我用我的构建覆盖了现有的应用商店构建。


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


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

    enter image description here


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


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


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

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


    如果您使用的是Xcode版本11.1(11A1027),请确保您未使用应用商店凭据(供应配置文件),因为在这种情况下,将安装build,并且没有日志或调试器将起作用,这花费了我很多时间才能解决它出来了,更新的Xcode已经挤了。现在构建,无需任何警告即可将其安装在设备上。


    您可以在目标设置" Apple LLVM Compiler 4.1代码生成"部分中检查一项设置。
    生成调试符号=是


    在Xcode 4和更高版本的情况下,*懒惰地*加载符号*似乎已被删除。所以请参考这篇文章

    简单而详细的说明对我有用。


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

    也许Xcode(或OS X)创建并记住了其自己的应用程序数字签名(未进行数字签名),然后感觉到应用程序已被修改,因此拒绝尝试设置断点。通过在应用程序的第一次(调试)运行之前制作我的mod,就可以使用我的mod进行数字签名。

    使用Xcode 3.2.2在OS X 10.6.8上进行的所有操作


    刚刚在XCode 4.2中解决了此问题,以上方法均无济于事。问题是(我不确定实际发生了什么,但是也许这对某人有帮助):我的队友在SVN中创建了新的构建配置并更新了项目。我在"运行方案"设置中设置了旧的构建配置,因此适合我的步骤是:

  • 产品->编辑方案...
  • 选择"运行%project_name.app%"(或任何引起问题的原因)
  • 在构建配置组合中,从我的队友中选择新的构建配置
  • 仅此而已,断点又回来了。希望这可以帮助。


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

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


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

    该问题与我的标题搜索路径有关。我让其中一些设置为"递归",而不是默认的"非递归"。将它们全部更改为"非递归"并更新所有相关的导入可适当解决此问题。


    尝试的东西:

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

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


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


    断点设置产品不起作用

    最新内容

    相关内容

    猜你喜欢