Xcodedebugging器有时不显示variables值?
这经常发生在我身上。 例如,现在我有一个方法中的断点停止debugging器。 。 。 并没有显示任何variables值。 其他时候,它显示一些,但不是其他时间。
谁能解释一下?
最常见的原因是,您正在尝试debugging使用优化启用和/或没有debugging符号编译的代码。 通常情况下,这是因为您试图debuggingRelease版本而不是Debug版本,但如果您对Debug版本设置进行了不适当的更改,也可能会发生在Debug版本中。
另一个不太常见的可能性是你已经清理了堆栈。
我有这个问题(使用Swift),我花了几年爬过我的git
提交find问题的开始。
对我来说,我使用的是Facebook Tweaks库,但是我(不必要地)从我的project-bridging-header.h
文件中导入它。
一旦我摆脱它,我得到了我的debugging回来。
例如,在我的桥头,我有:
#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
这固定了我所有的debugging问题,一切正常,我也可以使用Facebook的调整。
注意:我不认为这是Facebook调整本身的问题,您可能有其他一些库引起相同的问题。 这个想法是从你的
bridging-header
逐一删除的东西,看看你是否可以缩小这个问题。我想我在某处读到,如果一个图书馆在幕后造成了很多问题,这可能会阻止你的debugging器工作。
如果这没有帮助,请尝试爬行你的git提交,看看在哪个阶段debugging停止。
SO上的其他类似问题:
Xcodedebugging不显示值
安装CocoaPods Podfile后,Xcodedebugging器不显示variables信息
如果你有类似的问题,希望这有助于! 👍
可能的解决scheme是将当前目标debuggingscheme的优化级别设置为无。
项目 – >目标 – >生成设置 – >优化级别 – >debugging(或任何适合您的项目) – >无
资源:
我有类似的问题使用LLDB。 切换回GDB似乎解决它。 显然这不是解决问题的方法,但它是一个解决方法
你可以通过编写下面的命令来获取控制台中任何variables的值:
po name_of_an_objectCVar
要么
print name_of_a_cVar
如果您的断点在“设置了评估选项后自动继续”,那么它将不写入variables视图 – FYI
我知道这是旧的,但我也遇到了同样的问题。 我看不到任何对象的摘要,只是types和一些地址码。 在经历了4个小时的与编译器,debugging器和其他解决scheme的挣扎后,我偶然发现在debugging器中发现了这个选项。 “显示摘要”。 只要点击它,一切都得到修复,现在我看到所有的variables摘要!
有使用Xcode 6.4在设备上运行应用程序相同的问题。 在模拟器上运行将显示debuggingvariables面板上的所有variables。
有一种情况我已经看到Xcode无法应对返回值优化(RVO) – 如果编译器决定将RVO应用于variables,那么它可能不会出现在variables列表中。 你可以用g ++和clang来禁用这个编译器标志-fno-elide-constructors
另请参见了解有关c ++ 11的消除规则
如果使用Objective-C 2.0的@property特性,debugging器将不会显示这些variables,除非它们在Class接口中由显式的ivars支持。 据我所知,这将被固定在Xcode 4中。
临时的解决办法,当它发生在我身上:右键单击属性跳转到定义(你可以手动做,并滚动到文件顶部的@synthesize)
现在,如果这条线是这样的:
@synthesize myObject = _myObject;
在“_myObjects”上设置鼠标光标。 那对我有用的东西..当我有问题时。
我想出了为什么它不能在XCode 4.6中工作 – 我的对象中的所有variablesself,都是在.m文件中声明的,而不是在.h中声明的。 当我将其中的一个移回到.h文件时,它显示在debugging器中。 听起来像XCode的一个bug,它不能“看到”在实现文件中声明的variables。
对我来说,它工作更改显示variables面板的内容到Local Variables
,然后回到Auto
。
这个解决scheme在XCode 6.3.2 Swifttypes的项目上工作。
您需要在构build设置中禁用两种构build优化。 默认情况下,debugging版本的“swift编译器 – 代码生成”优化级别设置为快速。 您需要将其设置为无。 还要检查“apple llvm 7.1 – 代码生成”优化设置为无debugging版本。 最后,检查您是在构build设置的“架构”部分构builddebugging版本。
希望这可以帮助。
我一直在困扰这个问题,终于find了解决办法。 我认为很多原因可能会导致这个错误,但在我这里是解决scheme。 当你处于断点位置时,检查包含的类。 我包括使用双引号包含使用包含path的文件。
#include "MyClass.h"
代替
#include <MyPorject/MyClasses/MyClass.h>
所以,如果你有这个问题,请尝试再次检查你的包含和导入。 我知道这似乎很奇怪,但为我工作,我已经能够通过把双引号包括重现它。
我的问题是我已经启用了地址清理程序。 禁用清洁剂解决了我在XCode 8.2.1中的问题
对于使用吊舱的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
文件中删除它即可
debugging器显示看似错误的值的一个可能原因是variablestypes是Any?
。
例如
var a: Any? = 12 var b: Int? = a as? Int // b=13483920750 var c: Int = a as? Int ?? 0 // c=1
在上面的例子中, b
保持正确的值1
即使它不是这样显示的。