Кларк Кокс написал лучшее объяснение, которое я когда-либо нашел. Я постоянно обращаюсь к этой странице и сделал локальную копию на случай, если она исчезнет.
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, см. Статью Кларка, которая хорошо описывает эти случаи для общих случаев.