Во-первых, почему SpringBoard просто зависает, когда мой код делает что-то не так, а не падает
Код может плохо себя вести во многих отношениях, и я предполагаю, что ваш код просто блокирует основной поток Springboard.
Я не занимаюсь разработкой джейлбрейков, поэтому я менее знаком с этими журналами аварий. Вот мое предположение, основанное на данных
Это скорее всего зависшая нить:
* * 1010
Часть user
с шестнадцатеричными адресами в списке (0x35c63010 0x35c6320d 0x376818cb ...
), вероятно, является стеком вызовов этого потока.
Теперь вам нужно символизировать стек. Вам понадобятся символы для этого. Вы будете использовать инструмент командной строки atos
для обозначения каждого адреса. Обратите особое внимание на следующие параметры для atos
(man atos
для получения дополнительной информации):
-o symbol_file # debugging information output by the compiler this may be a dSYM or the binary itself depending on who you saved symbol information
-l load address # the base address in the process space at which your library is loaded into the springboard process
Also a list of addresses you wish to symbolicate
Usage:
atos -o my.o -l 0xba5eadd 0x37af10a0 0x37af1aaf
В приведенном выше примере atos
мы будем обозначать адреса 0x37af10a0
и 0x37af1aaf
, символы которых находятся в исходном двоичном коде. Библиотека my.o была бы загружена по базовому адресу 0x37af10a0
для аварийного процесса.
Итак, как вы находите базовый адрес? Список адресов, за которыми следуют уникальные идентификаторы, выглядит как список библиотек, загруженных в процесс с их соответствующими базовыми адресами.
Process 4904 binary images:
0xf6000 <7506c20d86da3f1dbe9bf38f8bda253d>
0x386000 <cf2cce379dcd3a4c970e3196b908b0b6>
0x3cd000 <30381ec9e24c3c289f447bf428bda2c1>
....
Однако, основываясь на данных стека вызовов и данных двоичного изображения, кажется, что отсутствуют данные или я просто что-то упускаю. Поскольку первые несколько адресов довольно высоки по сравнению с библиотеками, которые там загружены. Эти первые несколько адресов: 0x35c63010 0x35c6320d ...
То, что вы можете попробовать, это atos -o yourlib 0x35c63010 0x35c6320d
. В зависимости от того, как загружена ваша библиотека, может работать из-за того, как вещи загружаются в адресное пространство.