Я использую XCode уже несколько лет, и он прекратил предоставлять информацию в окне GDB, когда мое приложение для iOS получает любой тип SIGABRT или EXEC_BAD_ACCESS и т. Д. Теперь, когда я запускаю приложение, и оно генерирует любой тип SIGABRT, я получить:
Thread 1: Program received signal: "SIGABRT"
Но в окне вывода отладки, где описание ошибки и трассировка стека обычно бывают, я не получаю вывод Это делает отладку действительно трудной - мне приходится устанавливать случайные точки останова, пока я не пройдусь по программе и не найду строку, которая вызвала SIGABRT, и устранение проблемы может быть очень утомительным без какой-либо информации отладки.
Когда я ввожу "информационные сигналы" в окне GDB, я получаю:
SIGABRT Yes Yes Yes Aborted
для настроек сигнала, которые я считаю правильными.
Единственный способ получить любую информацию, которую я нашел, - это установить точку останова, используя:
(gdb) fb -[NSException raise]
(gdb) fb objc_exception_throw
(gdb) fb malloc_error_break
и затем, когда sigabrt случается, я использую
(gdb) set $exception = *(id *)($ebp + 8)
(gdb) po $exception
(gdb) po [$exception name]
(gdb) po [$exception reason]
Следует отметить, что я использую Xcode 4.2 и iOS SDK