Когда вы вызываете метод, например, [objectA message:arg1 argument:arg2]
, что происходит с аргументами?
Например, когда вы вызываете метод, адрес этого метода помещается в стек вызовов. Но что происходит с аргументами? Разве их тоже не подталкивают к стеку? Иначе как код метода узнает, где найти его аргументы?
Причина, по которой я спрашиваю, состоит в том, что когда вы получаете трассировку стека, вы получаете адрес функций или методов, которые были вызваны по порядку. Когда метод или функция возвращается, тот, кто вызвал его, все еще имеет ссылку на свои собственные аргументы. Так что я должен где-то ссылаться на arg1
и arg2
. Следовательно, из трассировки стека и символов стека на устройстве iOS вы должны иметь возможность получить метод или функцию, которая вызвала любой другой метод или функцию, а также получить ее аргументы.
Как вы получили эти аргументы?
По этому другому вопросу: вызов метода цель C log , они показывают метод для получения NSMethodSignature
метода и, используя его, вы можете получить номер и тип аргумента.
При этом, зная, где находятся аргументы, вы можете получить все функции или методы, которые были вызваны, и аргументы, которые использовались для их вызова.
Любая помощь будет оценена.
ОБНОВЛЕНИЕ
2011-08-03
В ответ на комментарии "fakeAccount22" я хотел бы сделать это во время выполнения из приложения.
Мой вопрос в основном сводится к следующему: во время выполнения и в приложении как вы получаете доступ к стеку вызовов или указателю стека в Objective-C для устройства iOS? Отличается ли он для Mac OSX?