Вот еще одно решение, не такое элегантное, как предыдущее, но если вы не добавляли точки останова или обработчики исключений, это может быть только один путь.
Когда приложение вылетает из строя и вы получаете необработанный стек вызовов первого вызова (в шестнадцатеричном формате), введите в консоль 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
, просто скопируйте адреса из вывода консоли и вставьте их в терминал.