Вот еще одно решение, не такое элегантное, как в предыдущем случае, но если вы не добавили точки останова или обработчики исключений, это может быть только один путь.
Когда приложение падает, и вы получаете исходное значение стек вызовов первого выброса (в шестнадцатеричных числах), введите в консоль Xcode info line *hex
(не забудьте звездочку и шестнадцатеричный спецификатор 0x
), например:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Если выиспользуя lldb , вы можете набрать image lookup -a hex
(без звездочки в этой ситуации), и вы получите аналогичный вывод.
С помощью этого метода вы можете перемещаться с вершины стека броска (тамбудет около 5-7 распространителей системных исключений) для вашей функции, которая вызвала сбой, и определит точный файл и строку кода.
Кроме того, для аналогичного эффекта вы можете использовать утилиту atos в терминале, просто наберите:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
и вы получите символическую трассировку стека (по крайней мере, для функций у вас есть символы отладки).Этот метод более предпочтителен, поскольку у вас нет для каждого вызова адреса info line
, просто скопируйте адреса из вывода консоли и вставьте их в терминал.