ios控制台利用gdb命令查看报错堆栈
2011-10-18 16:15
253 查看
下文来自http://wangjun.easymorse.com/?m=201103&paged=2
在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
利用堆栈信息,就可以准确的定位到错误地方。
在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
利用堆栈信息,就可以准确的定位到错误地方。
相关文章推荐
- iOS 控制台利用 gdb 命令查看报错堆栈
- ios控制台利用gdb命令查看报错堆栈
- iOS 控制台利用 gdb 命令查看报错堆栈
- iOS 控制台利用 gdb 命令查看报错堆栈
- 解析IOS控制台利用GDB命令查看报错堆栈
- iOS 查看lib库(.a)支持的处理器架构、合并真机库和模拟器库的命令
- iOS - 代码查看控制台打印内存使用情况:
- iOS 利用QuickLook查看PDF、WORD、PPT、xlsx
- IOS 查看lib库(.a)支持的处理器架构、合并真机库和模拟器库的命令
- 如何在GDB(控制台)中查看变量的值
- 在shell 中利用命令查看某个进程的进程id
- GDB下查看内存命令(x命令)
- 利用命令查看端口及对应程序
- [Python/自动化运维] 利用Paramiko模块执行批量上传/下载/执行命令/查看服务器列表
- linux利用grep查看打印匹配的下几行或前后几行的命令
- 写一个利用ping命令查看网站延迟的方法
- linux利用grep查看打印匹配的下几行或前后几行的命令
- 利用Winrar的控制台命令和DOS批处理自定制备份
- IOS 查看lib库(.a)支持的处理器架构、合并真机库和模拟器库的命令
- 利用命令查看端口及对应程序