iOS 控制台利用 gdb 命令查看报错堆栈

转自 http://wangjun.easymorse.com/?p=1263

    在 iOS 开发中,如果提前释放一个指针的内存,在以后还继续使用这个指针,那么程序会立刻 crash 掉,而且很难有报错信息,我以前都是靠猜测去判断错误的原因,我们应该利用工具去找到错误的地方,然后快速准确的定位到错误地方,及其错误原因,最后进行改进。

    其实 iOS 控制台提供这种机制,如果你选择 debug 模式,在程序 crash 之后,在控制台输入 bt,就可以显示 crash 堆栈:

    Program received signal:  “EXC_BAD_ACCESS”.
    warning: Unable to read symbols for /Developer/ios4.2.1/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).
    (gdb) bt
    #0  0x33a06464 in objc_msgSend ()
    #1  0x3139de2e in -[UIImageView setImage:] ()
    #2  0x00009ecc in -[RoundMenuView touchesEnded:withEvent:] (self=0x29e140, _cmd=0x316b1a7b, touches=0x2e1050, event=0x2424f0) at /Users/wangjun/workspace/iphone/Classes/RoundMenuView.m:130
    #3  0x313b1354 in -[UIWindow _sendTouchesForEvent:] ()
    #4  0x313b0cce in -[UIWindow sendEvent:] ()
    #5  0x3139bfc6 in -[UIApplication sendEvent:] ()
    #6  0x3139b906 in _UIApplicationHandleEvent ()
    #7  0x31eecf02 in PurpleEventCallback ()
    #8  0x304236fe in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
    #9  0x304236c2 in __CFRunLoopDoSource1 ()
    #10 0x30415f7c in __CFRunLoopRun ()
    #11 0x30415c86 in CFRunLoopRunSpecific ()
    #12 0x30415b8e in CFRunLoopRunInMode ()
    #13 0x31eec4aa in GSEventRunModal ()
    #14 0x31eec556 in GSEventRun ()
    #15 0x313cf328 in -[UIApplication _run] ()
    #16 0x313cce92 in UIApplicationMain ()
    #17 0x00002da2 in main (argc=1, argv=0x2fdff44c) at /Users/wangjun/workspace/iphone/main.m:19
    kill
    quit

    利用堆栈信息,就可以准确的定位到错误地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值