Objective-C - параметры метода печати с помощью GDB - PullRequest
2 голосов
/ 18 ноября 2011

Я пытаюсь отладить мою программу Objective-C с помощью GDB. У меня есть функция - (NSString *)reverse:(NSString *)someString, которую я хочу отладить.

Вот как я устанавливаю точку останова:

(gdb) break -[MyClass reverse:]

Теперь, когда код достигает точки останова, как мне распечатать адреса или, что еще лучше, значения self и аргумент метода? Я немного погуглил и нашел предложения типа po $rdx, но ничего не нашел.

Как я могу решить это?

Ответы [ 3 ]

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

Кларк Кокс написал лучшее объяснение, которое я когда-либо нашел. Я постоянно обращаюсь к этой странице и сделал локальную копию на случай, если она исчезнет.

http://www.clarkcox.com/blog/2009/02/04/inspecting-obj-c-parameters-in-gdb/

Быстрая версия для параметров x86_64 и без плавающей запятой:

first ObjC arg => $rdx
second ObjC arg => $rcx
third ObjC arg => $r8
fourth ObjC arg => $r9

Помните, что первые две вещи, передаваемые методу (в $ rdi и $ rsi), это self и _cmd. Я не считаю их здесь.

Если вы передаете числа с плавающей запятой, структуры или более четырех аргументов, все усложняется, и вы должны прочитать соглашения о вызовах в AMD64 ABI раздел 3.2.3. Если вы имеете дело с i386, PPC или ARM, см. Статью Кларка, которая хорошо описывает эти случаи для общих случаев.

3 голосов
/ 18 ноября 2011

При отладке с помощью gdb вы можете печатать с помощью po и print ()

po self
po someString


print (int) myInt

po действует как NSLog(@"%@", self); print () действует как NSLog(@"%d", myInt);

* вы можетепечатать больше типов, чем int

1 голос
/ 18 ноября 2011

Реализуйте метод description в вашем классе.Вы можете отформатировать значения так, как вам нравится.Из документов:

Команда print-object отладчика косвенно вызывает этот метод для создания текстового описания объекта.

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