Что означают адреса памяти в журналах сбоев iPhone? - PullRequest
2 голосов
/ 03 октября 2010

Сегодня я просматривал журналы сбоев, генерируемые приложением для iphone:

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3002d7da 0x3002b000 + 10202
1   UIKit                           0x31ec4abc 0x31e4d000 + 490172
2   UIKit                           0x31ebd214 0x31e4d000 + 459284
3   UIKit                           0x31ebcfac 0x31e4d000 + 458668

Может кто-нибудь сказать мне, что означают шестнадцатеричные адреса? (адреса памяти, конечно ..)

Я знаю, как символизировать, чтобы произвести:

0   libobjc.A.dylib                 0x000027da objc_msgSend + 18
1   UIKit                           0x00077abc -[UINavigationController _startDeferredTransitionIfNeeded] + 176
2   UIKit                           0x00070214 -[UINavigationController pushViewController:transition:forceImmediate:] + 600
3   UIKit                           0x0006ffac -[UINavigationController pushViewController:animated:] + 28

и отладить аварию оттуда, но мне любопытно; если вы берете

0x3002d7da 0x3002b000 + 10202

затем: 0x3002d7da = 0x3002b000 + (десятичное число) 10202

Что это означает в точности?

Я должен добавить, что я не ищу информацию о том, как символизировать, спасибо!

РЕДАКТИРОВАТЬ: что также странно для меня, что если вы сравниваете до и после символических версий, то для кода, который я написал:

9   memleaktest                     0x00002ffe 0x1000 + 8190
becomes
9   memleaktest                     0x00002ffe -[memleaktestViewController buttonOne] (memleaktestViewController.m:24)

имеет смысл, но для фреймворка:

8   CoreFoundation                  0x307fe52c 0x307f8000 + 25900
becomes
8   CoreFoundation                  0x0000652c -[NSObject(NSObject) release] + 24

адрес и смещение изменились? С чего бы это?

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Расширение ответа Оли на «символическую версию» приложения: отладочная информация извлекается из дистрибутивной версии приложения, чтобы сделать ее меньше, а также для защиты интеллектуальной собственности разработчика (поэтому вы не можете видеть класс и метод). имена).

Чтобы расшифровать журнал, вам необходимо иметь файл символов отладки, связанный с конкретной сборкой, которая создала журнал сбоя.

Этот файл (расширение .dSYM) будет находиться в папке сборки, где также находится бинарный файл приложения iPhone. Обратите внимание, что вам нужен файл .dSYM для конкретной компиляции, которая использовалась для компиляции приложения на телефоне - файл dSYM имеет временную метку, поэтому, если вы перекомпилируете приложение, файл dSYM изменится, даже если вы не измените строка кода.

Получив этот файл на своем компьютере, перетащите файл сбоев в xcode (или просмотрите журналы с подключенных устройств в Организаторе), что даст вам трассировку стека вызванных методов и конкретных строк кода, которые вызвали к катастрофе.

1 голос
/ 04 октября 2010
if you take
   0x3002d7da 0x3002b000 + 10202
What does this signify exactly?

В этом случае «+» не означает сложение.Эта строка говорит вам:

  • Рассматриваемая подпрограмма / библиотека начинается с адреса 0x3002b000
  • Ваша строка кода в трассировке стека содержит 10202 байта.
  • Сумма этих двух чисел = 0x3002d7da

(иначе говоря, 0x3002d7da = 0x3002b000 + 10202.)

Важная вещь, о которой выМожет быть, это начальный адрес вызываемого метода.

Но, на самом деле, вы можете игнорировать все это, поскольку он не так полезен, как условная версия, которая дает вам имя исходного файла и строкучисло.

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