XCode 3.2.2 и объективные-c 2.0 и отладка: где значения свойства/переменной экземпляра моего объекта в отладке?

при работе над проектом Mac OS (значение не iPhone) требование 10.6 и составляет 64 бита, позволяет мне использовать свойства для генерации и методов доступа и переменных экземпляра в заголовочном файле. но во время отладки я не вижу, как посмотреть на значения свойств объекта после того, как они были заполнены. там некоторая сборка устанавливает, который должен быть включен?

если я объявляю переменные экземпляра объекта (между {} в заголовке), то я вижу те значения (когда они используются) во время отладки или в самом окне отладки, или при помощи парения курсора по выделенному приему строки в редакторе во время повреждения, или путем выполнения cli в gdb как 'p *объект', например.

старый путь:

@class Suit;
@interface Card : NSObject 
{
    NSNumber *playOrder;
    Suit *suit;
    NSNumber *displayNumber;
    NSNumber *orderIndex;
}
@property(nonatomic, retain) Suit *suit;
@property(nonatomic, retain) NSNumber *displayNumber;
@property(nonatomic, retain) NSNumber *orderIndex;

новый путь:

@class Suit;
@interface Card : NSObject 

@property(nonatomic, retain) Suit *suit;
@property(nonatomic, retain) NSNumber *displayNumber;
@property(nonatomic, retain) NSNumber *orderIndex;
@property(nonatomic, retain) NSNumber *playOrder;

в этом новомодные 10.6 потребовали идеи на 64 бита (который кажется более простым мне), ни один из этих методов отладки не отображает значения объекта. я полагаю, что мне нужно было выключить что-то, потому что эта более новая идея, не кажется лучше.

gdb заканчивается для старого пути:

(gdb) po newCard
New Card : 0 of Suit : Hearts (NSCalibratedRGBColorSpace 1 0 0 1). with orderIndex of: 1
(gdb) p *newCard
$1 = {
   = {
    isa = 0x100002188
  }, 
  members of Card: 
  playOrder = 0x0, 
  suit = 0x200053a20, 
  displayNumber = 0x20001bac0, 
  orderIndex = 0x200012de0
}
(gdb)

gdb заканчивается для нового пути:

(gdb) po newCard
New Card : 0 of Suit : Hearts (NSCalibratedRGBColorSpace 1 0 0 1). with orderIndex of: 1
(gdb) p *newCard
$3 = {
   = {
    isa = 0x100002188
  }, }
(gdb) 

так смотря на документы для объективных-c 2.0:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW3

описывает то, что я отсылаю к (синтезирующий переменные экземпляра в 'современном' времени выполнения), но что не сказано нигде, то, что, если Вы делаете это, значения не будут доступны во время отладки.

я нашел страницу SO с уместной информацией, но не сфокусировался на этом эффекте: Используя переменные экземпляра с современным Временем выполнения

что я пропускал?

8
задан Community 23 May 2017 в 12:07
поделиться

1 ответ

Я предполагаю, что вы @синтезируете эти переменные?

Вам также может понадобиться { } в интерфейсе, чтобы компилятор знал, куда их поместить.

@interface Card : NSObject
{

}

Я бы избегал такого синтаксиса... особенно если вы сами определяете свойства.

Также посмотрите и попробуйте вывести список ivars для класса. Я постоянно использую следующее для отладки методов или классов из API, по которым нет документации.

    unsigned int total_method_count = 0;
    Method * method_list = class_copyMethodList(object_getClass([obj class]), &total_method_count);
    @try
    {
        int method_counter = 0;
        for (method_counter = 0; method_counter < total_method_count; method_counter++)
        {
            Method method = method_list[method_counter];
            // check if method the KVC getter you are interested in
            NSLog(@"Method: %s", sel_getName(method_getName(method)));
        }
    } @catch (NSException *e) {
        //Do Nothing
    }
2
ответ дан 5 December 2019 в 22:16
поделиться