【问题标题】:no Objective-C description available - Why?没有可用的 Objective-C 描述 - 为什么?
【发布时间】:2013-11-28 11:12:50
【问题描述】:

我真的不知道为什么在这个特定项目上我的调试器被极度“禁用”。

例如,我想获取一个对象的信息:

(lldb) po [_model dictionaryValue]
[no Objective-C description available]

我想知道这是为什么。它使调试变得非常困难,并且仅在当前项目中。我猜我在某个时候对设置做了一些事情。它几乎在我尝试检查的任何po someObject 上。但是,可以在调试控制台左侧的窗格中看到范围内的变量。

我在 Xcode 5 上,我的项目中有 Cocoapods,它是一个单元测试目标。

有什么见解或方法可以解决这个问题吗?

更新:

为了清楚起见,部分测试用例是如何实现的:

@interface WWCGateModelTests : XCTestCase  
{  
    WWCGate *_model;  
}  
@end  

@implementation WWCGateModelTests  
- (void)setUp
{
    [super setUp];
    // Put setup code here; it will be run once, before each test case.

    _model = [WWCGate loadGateModelWithIdentifier: kGateName];  // defined, not nil
}

- (void)tearDown  
{  
    [super tearDown];  

    NSError *error = nil;
    [_model saveModelOrError:&error];

    // Breakpoint here.  po _model does not print the model.    
    // This has been possible with other projects...  po error will print  
    // nil to the console.  How is an ivar not in scope?
}

【问题讨论】:

  • po _model 得到什么?
  • erm...你读过这个问题吗? :-) [没有可用的 Objective-C 描述]
  • 回答试图帮助你的人的好方法。我打算继续询问您在哪里拨打电话,是否在范围内,dictionaryValue 方法的返回值是多少。但我似乎太厚了,无法理解你的问题。
  • 对不起,我不是故意的。但它写得很清楚会发生什么。我会用另一种方式说:通常在其他项目中有效的方法在这个项目中无效。我在范围内,因为我的断点在包含该变量的方法内停止。 po someObject 正在返回相同的东西
  • 问题:你在哪里设置_model的值?

标签: objective-c xcode debugging lldb


【解决方案1】:

这很可能发生,因为单元测试目标通常设置为使用“发布”配置运行。 “发布”配置是调试符号已被剥离或优化的配置。

我怀疑如果您确定您使用的是未优化的、就地符号调试版本的应用程序,您将不会遇到此问题。您可以在 Xcode 的方案编辑器中更改它(例如,在执行“测试”或“配置文件”时,使用“调试”配置)。

【讨论】:

  • 是的,已经在方案中设置了。即便如此,如果我的测试目标设置为调试配置,这是否意味着 Pod 也使用调试配置构建? (我正在测试的数据模型基于 Mantle 框架,这是我项目中的一个 Pod)
  • po someObject 打印[someObject description] 的返回值,即使在发布版本中也应该可用(它是 NSObject 协议的一部分,所有 NSObject 都符合)。
  • We're having a debate on NSChat 关于 O.P. 的问题是什么。也许他在一个超出范围的变量上调用“po”?无论哪种方式,我们可能都需要更多信息。
  • 可能他正在尝试po 一个超出范围的对象!?
  • 方法中的断点。在左窗格(即控制台输出旁边)可以检查变量。只是 po 不工作。
【解决方案2】:

你确定你没有在原始类型上使用它吗?在上面使用p intVariable

每个对象都会通过至少打印类和内存地址来响应description

【讨论】:

  • 非常确定。 :-) po anInteger 也会产生来自调试器的不同响应
  • 嗯...po [object description]? 会发生什么
  • 如果 po _model 不起作用,我无法想象它会有什么方法。但无论如何,同样的事情。
  • 那么p object呢?
  • 给我一个指针地址:(lldb) p _model (WWCGate *) $0 = 0x09963c50
【解决方案3】:

我已经找到了这个问题(但还没有完全解决)。它与 Mantle 框架有关。在其描述方法中,它想吐出它在该点生成的 NSDictionary 的内容。我认为我设置模型的方式有问题,所以创建这个字典(可能基于我配置某些属性的方式)基本上是失败的。

我重写了描述方法以返回标准描述:

- (NSString*)description
{
    return [NSString stringWithFormat:@"<%@: %p>", self.class, self];
}

地球上的一切都又好起来了。 ;-)

感谢那些特别耐心的人。可以在以下帖子的更新 3 中找到有关此问题的更详细讨论:http://horseshoe7.wordpress.com/2013/05/26/hands-on-with-the-mantle-model-framework/

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2015-12-08
    相关资源
    最近更新 更多