Отправка сообщений объектам при отладке Objective-C в GDB без символов

StackOverflow https://stackoverflow.com/questions/56472

Вопрос

Я пытаюсь отправить сообщения объектам Objective-C в GDB.

(gdb) p $esi
$2 = (void *) 0x1268160
(gdb) po $esi
<NSArray: 0x1359c0>
(gdb) po [$esi count]
Target does not respond to this message selector.

Я не могу отправить ему сообщение.Я что-то пропустил?Мне действительно нужны символы или что-то еще?

Это было полезно?

Решение

Если вам необходимо переопределить gdb и отправить сообщение объекту, когда он вам этого не позволяет, вы можете использовать PerformSelector:

(gdb) print (int)[receivedData count]
Target does not respond to this message selector.

(gdb) print (int)[receivedData performSelector:@selector(count) ]
2008-09-15 00:46:35.854 Executable[1008:20b] *** -[NSConcreteMutableData count]:
unrecognized selector sent to instance 0x105f2e0

Если вам нужно передать аргумент, используйте withObject:

(gdb) print (int)[receivedData performSelector:@selector(count) withObject:myObject ]

Другие советы

Возможно ли, что вам нужно провести кастинг $esi?

p (NSUInteger)[(NSArray *)$esi count]

@[Джон Калсбик]

Затем он жалуется на отсутствие символов.

(gdb) p (NSUInteger)[(NSObject*)$esi retainCount]
No symbol table is loaded.  Use the "file" command.
(gdb) p [(NSArray *)$esi count]
No symbol "NSArray" in current context.

Я попытался загрузить символы для Foundation:

(gdb) add-symbol-file /System/Library/Frameworks/Foundation.framework/Foundation 
add symbol table from file "/System/Library/Frameworks/Foundation.framework/Foundation"? (y or n) y
Reading symbols from /System/Library/Frameworks/Foundation.framework/Foundation...done.

но все равно не повезло:

(gdb) p [(NSArray *)$esi count]
No symbol "NSArray" in current context.

В любом случае, я не думаю, что кастинг — это решение этой проблемы, вам не обязательно знать, что это за объект, чтобы иметь возможность отправлять ему сообщения.Странно то, что я нашел NSCFArray, на который у меня нет проблем с отправкой сообщений:

(gdb) p $eax
$11 = 367589056
(gdb) po $eax
<NSCFArray 0x15e8f6c0>(
    file://localhost/Users/ask/Documents/composing-fractals.pdf
)

(gdb) p (int)[$eax retainCount]
$12 = 1

так что я думаю, что возникла проблема с объектом, который я исследовал...или что-то.

Спасибо за вашу помощь!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top