Как получить код сборки из аварийного журнала iOS

Я имею дело с трудно воспроизводимым памяти и устранением неполадок, используя рекомендации, приведенные в сбоемсеансе 414 wwdc18, с дополнительными подсказками из этой статьи.

У меня нет проблем с символизацией трассировки стека (см. Внизу), но когда я пытаюсь разобрать адрес из последнего кадра, я получаю эту ошибку из консоли lldb:

      (lldb) disassemble -a 0x00000001052faed4
error: error reading data from section __text
error: Failed to disassemble memory in function at 0x1052faed4.

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

К сожалению, видео WWDC проходит через установку / конфигурацию, предполагая, что оно должно работать... но это не так. Я подозреваю, что в видео отсутствует какая-то важная конфигурация? Кто-нибудь знает, как попасть в ассемблерный код?

Для справки, это верхняя часть символьной трассировки стека (показывающая сбойный поток)

      Thread[0] EXC_BAD_ACCESS (SIGSEGV) (KERN_INVALID_ADDRESS at 0x8000000000000010 -> 0x0000000000000010 (possible pointer authentication failure))
[  0] 0x00000001052faed4 myApp`Flux.FASFluxDispatcher.invokeCallback(token: Swift.String) -> () + 60
[  1] 0x00000001052faecf myApp `Flux.FASFluxDispatcher.invokeCallback(token: Swift.String) -> () + 55
[  2] 0x00000001052fb2eb myApp `closure #1 () -> () in Flux.FASFluxDispatcher.doDispatch(action: Any) -> () + 195
[  3] 0x00000001052feeb7 myApp `partial apply forwarder for reabstraction thunk helper from @callee_guaranteed () -> (@error @owned Swift.Error) to @escaping @callee_guaranteed () -> (@out (), @error @owned Swift.Error) + 19
[  4] 0x00000001bff1ef30 autoreleasepool<A>(invoking:) + 64 (ObjectiveC.swift:172)
[  5] 0x00000001052fb5af myApp `Flux.FASFluxDispatcher.dispatchAction(action: Any) -> () + 339
[  6] 0x00000001052ff77f myApp `partial apply forwarder for closure #1 () -> () in Flux.FASActionCreator.dispatchAsync(action: Any, completion: Swift.Optional<() -> ()>) -> () + 111
[  7] 0x00000001052fc0bf myApp `reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping @callee_unowned @convention(block) () -> () + 19
[  8] 0x000000019967024c _dispatch_call_block_and_release + 32 (init.c:1454)
[  9] 0x0000000199671db0 _dispatch_client_callout + 20 (object.m:559)
[ 10] 0x000000019967f7ac _dispatch_main_queue_callback_4CF + 836 (inline_internal.h:2548)
[ 11] 0x00000001999f911c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1790)
[ 12] 0x00000001999f3120 __CFRunLoopRun + 2508 (CFRunLoop.c:3118)
[ 13] 0x00000001999f221c CFRunLoopRunSpecific + 600 (CFRunLoop.c:3242)
[ 14] 0x00000001b15bc784 GSEventRunModal + 164 (GSEvent.c:2259)
[ 15] 0x000000019c432ee8 -[UIApplication _run] + 1072 (UIApplication.m:3253)
[ 16] 0x000000019c43875c UIApplicationMain + 168 (UIApplication.m:4707)
[ 17] 0x0000000104edcf67 myApp `main + 67 at AppDelegate.swift:29:9
[ 18] 0x00000001996b26b0 start + 4

Thread[1]
[  0] 0x00000001c79cd1ac __psynch_cvwait + 8
[  1] etc...

1 ответ

Файл DWARF в dSYM содержит только символьную и отладочную информацию, он не содержит полной копии сегментов TEXT и DATA двоичного файла. Если есть копия двоичного файла рядом с dSYM в файловой системе, lldb загрузит ее при загрузке dSYM. Или вы можете использовать target modules add команда, указывающая lldb загрузить двоичный файл в текущий сеанс.

Другие вопросы по тегам