【问题标题】:Xcode debugger sometimes doesn't display variable values?Xcode 调试器有时不显示变量值?
【发布时间】:2011-03-14 09:14:38
【问题描述】:

这种情况经常发生在我身上。例如,现在我让调试器在方法的断点处停止。 . .它根本不显示任何变量值。其他时候,它会显示一些,但不会显示其他。

谁能解释一下?

【问题讨论】:

  • 嗨威廉,你找到解决方案了吗?我也有同样的问题。很烦人。所以我需要一直做NSLog; xcode 调试器真的无法以这种方式工作。
  • 在变量视图的底部是一个带有条目的小菜单:自动、局部变量和全部。
  • @WayneLo 看看下面我的回答,它适用于最新的 Xcode - 版本 7.3 (7D175)

标签: xcode debugging


【解决方案1】:

最常见的原因是您尝试调试启用优化和/或没有调试符号编译的代码。这通常是因为您尝试调试的是 Release 版本而不是 Debug 版本,但如果您对 Debug 版本设置进行了不当更改,Debug 版本也可能发生这种情况。

另一种不太常见的可能性是您已经对堆栈进行了冲洗。

【讨论】:

  • 感谢您的回复,但我很确定这些都不适用于我的情况。
  • 我暂时将运行方案切换为发布而不是调试并忘记了。换回来固定。谢谢。
  • 这不是我的问题。
  • @IanWarburton:一个“hosed”或“trashed”堆栈只是意味着您的代码中的错误已经覆盖了堆栈的某些部分并损坏了局部变量和/或返回地址,使得不可能调试器显示局部变量和调用链的有意义的信息(回溯)。
  • 我不小心将方案设置为发布一次,忘记将其改回调试。这就是我的问题。
【解决方案2】:

我遇到了这个问题(使用 Swift),我花了很长时间在我的 git 提交中爬行,以找到问题开始的地方。


对我来说,我使用的是 Facebook Tweaks 库,但我(不必要地)从我的 project-bridging-header.h 文件中导入它。

一旦我摆脱它,我就恢复了调试。

例如,在我的桥接头中:

#ifndef PROJECT_Bridging_Header_h
#define PROJECT_Bridging_Header_h
// Facebook Tweaks
#import "FBTweak.h"
#import "FBTweakStore.h"
#import "FBTweakCategory.h"
#import "FBTweakCollection.h"
#import "FBTweakViewController.h"
#import "FBTweakShakeWindow.h"
#endif

我删除了所有导入,并像往常一样将其导入我的 AppDelegate import Tweaks

例如:

#ifndef PROJECT_Bridging_Header_h
#define PROJECT_Bridging_Header_h
// Removed Facebook Tweaks
#endif

在我的AppDelegate.swift

import Tweaks

这解决了我的所有调试问题,一切正常,我还可以使用 Facebook Tweaks。

注意:我认为这不是 Facebook Tweaks 本身的问题,您可能有其他一些库导致了同样的问题。这个想法是从您的bridging-header 中删除一些内容,看看您是否可以缩小问题范围。

我想我在某处读到过,如果某个库在幕后引发了许多问题,这可能会导致您的调试器停止工作。

如果这没有帮助,请尝试爬取您的 git 提交并查看调试在哪个阶段停止。

关于 SO 的其他类似问题:

Xcode Debugging not showing values

Xcode debugger doesn't display variable information after installing CocoaPods Podfile

如果您遇到类似问题,希望对您有所帮助! ?

【讨论】:

  • 我在切换到第三方框架的 Carthage 版本时发现了同样的问题。我只是忘记从桥接头文件中删除 .h 并且没有任何警告。
  • 感谢或此评论!我的也与桥接头有关;我通过使用“(lldb)po variableICannotSee”确定了确切的修复方法,然后查看了错误发生的原因-警告:模块My-Bridging-Header.h中的Swift错误,错误:找不到'thisFileNotFound.h'文件错误:失败导入桥接头 'My-Bridging-Header.h' 来自该模块的调试信息在调试器中将不可用。
【解决方案3】:

一种可能的解决方案是将当前目标调试方案的优化级别设置为无。

项目 -> 目标 -> 构建设置 -> 优化级别 -> 调试(或任何适合您的项目) -> 无

来源:

https://stackoverflow.com/a/14948486/3590753

【讨论】:

    【解决方案4】:

    我在使用 LLDB 时遇到过类似的问题。将其切换回 GDB 似乎可以解决这个问题。显然这并不能解决问题,但无论如何它是一种解决方法

    【讨论】:

    • 对我来说,当执行在断点处停止时正常显示的变量,除了异常断点。这是一个巨大的痛苦。幸运的是切换到 GDB 为我修复了它。为什么苹果不能让他们的 Xcode 一起行动?
    • 不幸的是,切换不再可能,请参阅:stackoverflow.com/q/28927815/8740349
    【解决方案5】:

    我的问题是我启用了地址清理程序。禁用消毒剂解决了我在 XCode 8.2.1 中的问题

    【讨论】:

    • +1 也可以解决我的问题。XCode 中的新地址清理程序也阻止了我调试一些变量。这是一个很棒的功能,可以解决一些非常实际的问题,但这并不是一个很好的权衡。这是一个已知问题吗?
    【解决方案6】:

    可以通过写法获取控制台中任意变量的值:

    po name_of_an_objectCVar
    

    print name_of_a_cVar
    

    【讨论】:

    • 这不能回答 OP 的问题。
    • 出于某种原因,我只能打印,谢谢。
    【解决方案7】:

    如果您的断点设置了“在评估选项后自动继续”,那么它不会写入变量视图 - 仅供参考

    【讨论】:

      【解决方案8】:

      我知道这是旧的,但我也遇到了同样的问题。我看不到任何对象的任何摘要,只有类型和一些地址代码。在与编译器、调试器和其他解决方案苦苦挣扎 4 小时后,我正要放弃,但偶然在调试器中发现了这个选项。 “显示摘要”。只需单击它,一切都已修复,现在我可以看到所有变量摘要!

      【讨论】:

        【解决方案9】:

        使用 Xcode 6.4 在设备上运行应用程序时遇到了同样的问题。在模拟器上运行将在调试变量面板上显示所有变量。

        【讨论】:

          【解决方案10】:

          我见过一种情况,Xcode 无法处理返回值优化 (RVO)——如果编译器决定将 RVO 应用于变量,那么它可能不会出现在变量列表中。您可以在 g++ 中禁用此功能,并使用编译器标志 -fno-elide-constructors 发出叮当声

          另见Understanding eliding rules with regard to c++11

          【讨论】:

          • 这为我解决了谢谢!这应该是调试版本的默认设置,或者其他调试器可以处理它(例如 gdb)吗?
          • 我们确实尝试关闭编译器开关,但它在我们的项目中造成了问题,因为某些文件没有使用它编译——我猜这是全有或全无。
          • 所以如果你只有一些文件,它就不能很好地工作?
          • 是的,我们遇到了随机崩溃——如果启用了 RVO,那么调用者和被调用者必须具有相同的设置,否则您可能会遇到堆栈损坏。
          【解决方案11】:

          对于使用 pod 的 Swift mix OC 项目

          通过删除无用的标头(通过 pod 与框架一起导入)xx-Bridging-Header.h 来修复它

          例如。 在过去,我使用 #import "GCDAsyncSocket.h" 导入标题,我已将其添加到 podfile 中

          platform:ios, '8.0' use_frameworks! target "roocontrollerphone" do pod 'CocoaAsyncSocket' end

          只需在 xx-Bridging-Header.h 文件中删除它

          【讨论】:

            【解决方案12】:

            如果您使用的是 Objective-C 2.0 的 @property 功能,调试器不会显示这些变量,除非它们在您的 Class 接口中由显式 ivars 支持。据我了解,这将在 Xcode 4 中修复。

            【讨论】:

              【解决方案13】:

              当它发生在我身上时的临时解决方案: 右键单击属性 跳转到定义(你可以手动完成并滚动到文件顶部的@synthesize)

              现在,如果这条线是这样的:

              @synthesize myObject = _myObject ;

              将鼠标光标设置在“_myObjects”上。这对我有用..当我遇到问题时。

              【讨论】:

                【解决方案14】:

                我知道为什么它在 XCode 4.6 中不起作用 - 我的对象 self 中的所有变量都在 .m 文件而不是 .h 中声明。当我将其中一个移回 .h 文件时,它出现在调试器中。听起来像 XCode 的一个错误,它无法“看到”实现文件中声明的变量。

                【讨论】:

                  【解决方案15】:

                  对我来说,它可以将显示变量面板的内容更改为Local Variables,然后返回Auto

                  此解决方案适用于 XCode 6.3.2,Swift 类型项目。

                  【讨论】:

                    【解决方案16】:

                    您需要在构建设置中禁用两种类型的构建优化。默认情况下,调试构建的“快速编译器 - 代码生成”优化级别设置为快速。您需要将其设置为无。还要检查“apple llvm 7.1 - 代码生成”优化是否设置为无以进行调试构建。 最后,检查您是否正在构建设置的“架构”部分中构建调试版本。

                    希望这会有所帮助。

                    【讨论】:

                      【解决方案17】:

                      我被这个问题困扰了一段时间,终于找到了解决方案。 我认为很多原因都可能导致此错误,但在我的情况下,这是解决方案。 当您处于断点位置时,请检查包含的类。 我使用双引号包含使用包含路径定位的文件。

                      #include "MyClass.h"
                      

                      而不是

                      #include <MyPorject/MyClasses/MyClass.h>
                      

                      因此,如果您遇到此问题,请尝试仔细检查您的包含和导入。 我知道这看起来很奇怪,但对我有用,我已经能够通过放回双引号包含来重现它。

                      【讨论】:

                        【解决方案18】:

                        调试器显示看似错误值的一个可能原因是变量类型为Any?

                        例如

                        var a: Any? = 12
                        var b: Int? = a as? Int // b=13483920750
                        var c: Int = a as? Int ?? 0 // c=1
                        

                        在上面的示例中,b 拥有正确的 1 值,即使它没有这样显示。

                        【讨论】:

                          【解决方案19】:

                          我遇到了同样的问题,我通过重新安装所有 Pod 解决了这个问题。只需删除它们并重新安装。

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2019-06-13
                            • 2021-02-17
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-04-29
                            • 2015-09-14
                            • 2011-06-05
                            相关资源
                            最近更新 更多