这种情况经常发生在我身上。例如,现在我将调试器停在方法的断点处。 。 。并且它根本不显示任何变量值。其他时候,它显示一些,但不显示其他。
任何人都可以解释一下吗?
答案 0 :(得分:39)
最常见的原因是您尝试调试在启用优化和/或没有调试符号的情况下编译的代码。通常这是因为您尝试调试Release构建而不是Debug构建,但如果您对Debug构建设置进行了不适当的更改,它也会发生在Debug构建中。
另一种不常见的可能性是你已经冲洗了堆栈。
答案 1 :(得分:17)
我有这个问题(使用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
中照常导入。
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)
一种可能的解决方案是将当前目标调试方案的优化级别设置为无。
项目 - >目标 - >构建设置 - >优化级别 - >调试(或任何适合您的项目) - >无
来源:
答案 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个小时与编译器,调试器和其他解决方案的挣扎,我偶然放弃了,偶然我在调试器中找到了这个选项。 “显示摘要”。只需点击它,一切都得到修复,现在我看到所有变量摘要!
答案 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);
答案 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中修复。