Я пытаюсь написать сценарий DTrace, который покажет мне параметр, переданный в -[NSURLConnection sendSynchronousRequest:returningResponse:error:]
, и я не могу найти структуру, которая работает для извлечения строки из переданного параметра NSString
. На этот вопрос есть ответ, который работает для приложений OS X, но не работает для моего приложения, которое использует симулятор iOS.
Хотя я ищу решение для этого конкретного примера, мне гораздо больше интересно узнать, как лучше всего определить/обнаружить базовую структуру памяти для любого заданного объекта Objective-C. Как видно из тестового приложения для OS X, которое я написал, параметр NSString
не всегда содержит необработанные строковые данные в одном и том же месте. В случае, когда это __NSCFString
, кажется, находится (с префиксом длины) в 16 байтах. В случае, когда это строка __NSCFConstant
, это где-то еще, что не сразу очевидно, глядя на необработанный дамп памяти.
Если в системных заголовках определены структуры, которые покажут мне, что я ищу, это было бы хорошим первым шагом, но я думаю, что LLDB также должен иметь возможность показывать мне полезные подсказки.