Как я могу настроить Xcode так, чтобы GDB печатал информацию об ошибке SIGABRT? - PullRequest
4 голосов
/ 02 сентября 2011

Я использую 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

1 Ответ

4 голосов
/ 14 октября 2011

Попробуйте поместить эти 3 в файл ~/.gdbinit:

fb -[NSException raise]
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

Весь мой .gdbinit, если это поможет:

#define NSZombies

fb -[NSException raise]
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

fb -[_NSZombie init]
fb -[_NSZombie retainCount]
fb -[_NSZombie retain]
fb -[_NSZombie release]
fb -[_NSZombie autorelease]
fb -[_NSZombie methodSignatureForSelector:]
fb -[_NSZombie respondsToSelector:]
fb -[_NSZombie forwardInvocation:]
fb -[_NSZombie class]
fb -[_NSZombie dealloc]

fb szone_error

set env MallocHelp=YES
set env NSDebugEnabled=YES
set env NSZombieEnabled=YES
set env NSDeallocateZombies=NO
set env MallocCheckHeapEach=100000
set env MallocCheckHeapStart=100000
set env MallocScribble=YES
set env MallocGuardEdges=YES
set env MallocCheckHeapAbort=1
set env NSAutoreleaseFreedObjectCheckEnabled=YES
set env MallocStackLoggingNoCompact=YES
set env MallocStackLogging=YES
set env CFZombie 5

tty /dev/ttys000
...