Xcode调试器有时不显示变量值?

时间:2010-07-11 01:33:10

标签: xcode debugging

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

任何人都可以解释一下吗?

18 个答案:

答案 0 :(得分:39)

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

另一种不常见的可能性是你已经冲洗了堆栈。

答案 1 :(得分:17)

我有这个问题(使用Swift),我花了很多时间爬过我的git提交来找到问题的起点。

xcode debugging variables not working or showing

对我来说,我使用的是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中照常导入。

e.g:

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

并在我的AppDelegate.swift

import Tweaks

这解决了我所有的调试问题,一切都按预期工作,我也可以使用Facebook调整。

  

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

     

我想我在某处读到如果一个库在幕后引起很多问题,这可能会阻止你的调试器工作。

     

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

关于SO的其他类似问题:

Xcode Debugging not showing values

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

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

答案 2 :(得分:8)

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

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

来源:

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

答案 3 :(得分:6)

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

答案 4 :(得分:5)

您可以通过编写以下内容获取控制台中任何变量的值:

po name_of_an_objectCVar

print name_of_a_cVar

答案 5 :(得分:2)

我的问题是我启用了地址清洁剂。禁用清洁剂解决了我在XCode 8.2.1中的问题

答案 6 :(得分:2)

如果断点已经"在评估选项后自动继续"设置,然后它不会写入变量视图 - FYI

答案 7 :(得分:1)

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

enter image description here

答案 8 :(得分:1)

对于使用pod的Swift mix OC Project

通过删除无用的标头(使用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文件

中删除它即可

答案 9 :(得分:1)

我已经看到Xcode无法应对返回值优化(RVO)的情况 - 如果编译器决定将RVO应用于变量,那么它可能不会出现在变量列表中。您可以在g ++中禁用它,并使用编译器标志$('.clonedInput_1:last-child div input').val(null);

进行声明

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

E.g。

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

在上面的示例中,b保留了1的正确值,即使它没有显示。{/ p>

答案 12 :(得分:0)

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

#include "MyClass.h"

而不是

#include <MyPorject/MyClasses/MyClass.h>

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

答案 13 :(得分:0)

您需要在构建设置中禁用两种类型的构建优化。默认情况下,&#34; swift编译器 - 代码生成&#34;调试版本的优化级别设置为快速。您需要将此设置为none。还要检查&#34; apple llvm 7.1 - 代码生成&#34;调试版本的优化设置为none。 最后,检查您是否在&#34;架构&#34;中构建调试版本。您的构建设置部分。

希望这有帮助。

答案 14 :(得分:0)

对我而言,它可以将显示变量面板的内容更改为Local Variables,然后再更改为Auto

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

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

@synthesize myObject = _myObject;

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

答案 17 :(得分:0)

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