atos дает ___lldb_unnamed_function

У меня есть аварийный дамп, который не будет нормально символизироваться - когда я перетаскиваю его в органайзер Xcode или вручную запускаю symbolicatecrash, отображаются системные символы, но все адреса инструкций приложения остаются нетронутыми.

Я попытался использовать atos для решения этой проблемы, но получил следующий результат:

got symbolicator for myarchive.xcarchive/Products/Applications/MyApp.app/MyApp, base address 4000
___lldb_unnamed_function2115$$MyApp (in MyApp) + 992
___lldb_unnamed_function2096$$MyApp (in MyApp) + 66
___lldb_unnamed_function6053$$MyApp (in MyApp) + 348
___lldb_unnamed_function6064$$MyApp (in MyApp) + 162
___lldb_unnamed_function6002$$MyApp (in MyApp) + 18
___lldb_unnamed_function1029$$MyApp (in MyApp) + 416
___lldb_unnamed_function2280$$MyApp (in MyApp) + 106
___lldb_unnamed_function2272$$MyApp (in MyApp) + 198
___lldb_unnamed_function400$$MyApp (in MyApp) + 96
___lldb_unnamed_function1$$MyApp (in MyApp) + 36

Адрес, который в настоящее время сопоставляется с ___lldb_unnamed_function1$$MyApp (in MyApp) + 36, должен соответствовать моему корневому вызову в main.m. Очевидно, я не знаю, какими должны быть остальные, но я предполагаю, что если один из них неправильный, они все неправильные. Что может быть причиной этого? Появляется ли обычно ___lldb_unnamed_function где-либо, кроме встроенных в блоки функций?

К сожалению, это приведет к длинному вопросу, но, поскольку это может быть ошибкой при вычислении смещения загрузки двоичного файла приложения, я перечислю шаги, которые я выполнил, чтобы получить приведенный выше вывод.

Я использовал dwarfdump -u myarchive.xcarchive/Products/Applications/MyApp.app/MyApp, чтобы убедиться, что я использую правильный двоичный файл:

UUID: BA41E9A3-4BB5-3F8A-8D57-0D16447FFEC6 (armv7) myarchive.xcarchive/Products/Applications/MyApp.app/MyApp

UUID: A6E0970C-05FE-3A79-887D-84F3892637FD (armv7s) myarchive.xcarchive/Products/Applications/MyApp.app/MyApp

UUID в аварийном дампе совпадает с первым:

Binary Images:
   0x97000 -   0x3cefff +MyApp armv7  <ba41e9a34bb53f8a8d570d16447ffec6> /var/mobile/Applications/AF97EC52-7A2F-4772-AA05-74E739BA6882/MyApp.app/MyApp

В этой строке также указано смещение нагрузки как 0x97000 и архитектура как armv7. Интересующие меня адреса:

1   MyApp                               0x001357dc 0x97000 + 649180
2   MyApp                               0x00134446 0x97000 + 644166
3   MyApp                               0x00240cec 0x97000 + 1744108
4   MyApp                               0x002416ea 0x97000 + 1746666
5   MyApp                               0x0023e2de 0x97000 + 1733342
6   MyApp                               0x000de724 0x97000 + 292644
7   MyApp                               0x00144f1a 0x97000 + 712474
8   MyApp                               0x00144336 0x97000 + 709430
27  MyApp                               0x000b1024 0x97000 + 106532
28  MyApp                               0x0009d464 0x97000 + 25700

Итак, я запустил xcrun atos -l 0x97000 -arch armv7 -o myarchive.xcarchive/Products/Applications/MyApp.app/MyApp 0x001357dc 0x00134446 0x00240cec 0x002416ea 0x0023e2de 0x000de724 0x00144f1a 0x00144336 0x000b1024 0x0009d464, что дало мне вывод выше.

Примечание: поскольку это выглядело неправильно, я подумал, что, возможно, мне нужно вручную вычесть значение слайда. Я получил его из комплекта приложений с xcrun otool -arch armv7 -l myarchive.xcarchive/Products/Applications/MyApp.app/MyApp:

Load command 0
      cmd LC_SEGMENT
  cmdsize 56
  segname __PAGEZERO
   vmaddr 0x00000000
   vmsize 0x00004000
  fileoff 0
 filesize 0
  maxprot 0x00000000
 initprot 0x00000000
   nsects 0
    flags 0x0
Load command 1
      cmd LC_SEGMENT
  cmdsize 736
  segname __TEXT
   vmaddr 0x00004000
   vmsize 0x00338000
  fileoff 0
 filesize 3375104
  maxprot 0x00000005
 initprot 0x00000005
   nsects 10
<snip>

Однако повторный запуск команды с -l 0x93000 дал очень похожий результат:

got symbolicator for /Users/arkaaito/Library/Developer/Xcode/Archives/2013-11-07/Zoomingo 11-7-13, 2.14 PM.xcarchive/Products/Applications/Zoomingo.app/Zoomingo, base address 4000
___lldb_unnamed_function2166$$Zoomingo (in Zoomingo) + 684
___lldb_unnamed_function2160$$Zoomingo (in Zoomingo) + 182
___lldb_unnamed_function6165$$Zoomingo (in Zoomingo) + 164
___lldb_unnamed_function6176$$Zoomingo (in Zoomingo) + 46
___lldb_unnamed_function6114$$Zoomingo (in Zoomingo) + 70
___lldb_unnamed_function1129$$Zoomingo (in Zoomingo) + 28
___lldb_unnamed_function2305$$Zoomingo (in Zoomingo) + 2446
___lldb_unnamed_function2302$$Zoomingo (in Zoomingo) + 3714
___lldb_unnamed_function476$$Zoomingo (in Zoomingo) + 512
___lldb_unnamed_function85$$Zoomingo (in Zoomingo) + 532

person Arkaaito    schedule 04.12.2013    source источник


Ответы (1)


Вы должны вызывать atos с пакетом dSYM, а не с пакетом приложений, поскольку в нем обычно отсутствуют символы!

Итак, вызов:

xcrun atos -l 0x97000 -arch armv7 -o myarchive.xcarchive/dSYMs/MyApp.app.dSYM 0x001357dc 0x00134446 0x00240cec 0x002416ea 0x0023e2de 0x000de724 0x00144f1a 0x00144336 0x000b1024 0x0009d464
person Kerni    schedule 04.12.2013
comment
Гах! Спасибо. Закон Мерфи для StackOverflow: я никогда не замечаю своих ошибок по невнимательности, пока не сдамся и не опубликую их в мире. :-) - person Arkaaito; 04.12.2013
comment
Я получаю сообщение о невозможности загрузки символов для файла MyApp.app.dSYM для архитектуры «armv7». ошибка. Приложение также было создано только с помощью armv7. - person LightningStryk; 06.02.2014