Как мне распечатать результат метода классаjective-c в gdb? - PullRequest
7 голосов
/ 26 апреля 2011

При использовании gdb (через консоль отладки) для отладки программы iPad в Xcode 4 я пытаюсь распечатать результат выполнения метода класса:

(gdb) po [MyClass foo:@"bar"]

gdb выводит следующее:

В текущем контексте нет символа "MyClass".

Есть ли способ напечатать результат +(NSString *)foo:(NSString *)string с использованием gdb в Xcode 4

Ответы [ 2 ]

11 голосов
/ 22 ноября 2011

У меня была такая же проблема здесь .Решение в моем случае заключалось в использовании NSClassFromString следующим образом:

po [NSClassFromString(@"MyClass") foo:@"bar"]
6 голосов
/ 26 апреля 2011

Проблема в том, что вы не объявили ничего типа MyClass в вашем источнике целей. Если ваш MyClass предназначен только для статических методов, вы можете попробовать что-то вроде

#if DEBUG //gdb Static Method Fix
    MyClass *mc = nil;  //This makes the symbol available
    [mc class];         //supress unused warning
#endif

Я предполагаю, что не объявляя тип класса где-либо в вашем коде, он был оптимизирован из символов поиска. Из моего тестирования этот вызов даже не нужно вызывать, чтобы он работал. Если вы посмотрите на printcmd.c из gdb line # 1250, то это то место, откуда печатается ошибка, и это происходит после вызова lookup_minimal_symbol. И хотя GDB не может найти символ в контексте, все же нормально использовать только статические методы MyClass в вашем исходном коде без исправления выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...