加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 如何配置Xcode以便GDB打印SIGABRT错误信息?

发布时间:2020-12-14 17:36:48 所属栏目:百科 来源:网络整理
导读:我已经使用 Xcode多年了,当我的iOS应用程序收到任何类型的SIGABRT或EXEC_BAD_ACCESS等时,它已停止在gdb窗口中提供信息.现在,当我运行应用程序并生成任何类型的SIGABRT时,我得到一个: Thread 1: Program received signal: "SIGABRT" 但是,在调试输出窗口中,
我已经使用 Xcode多年了,当我的iOS应用程序收到任何类型的SIGABRT或EXEC_BAD_ACCESS等时,它已停止在gdb窗口中提供信息.现在,当我运行应用程序并生成任何类型的SIGABRT时,我得到一个:

Thread 1: Program received signal: "SIGABRT"

但是,在调试输出窗口中,错误描述和堆栈跟踪通常是我没有输出.这使调试变得非常困难 – 我必须设置随机断点,直到我逐步执行程序并找到导致SIGABRT的行并且修复问题可能非常繁琐而没有任何调试信息.

当我在gdb窗口中输入“info signals”时,我得到:

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

解决方法

尝试将这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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读