iOS 程勋奔溃-一种调试方法 lidb命令
2014-07-15 16:04
197 查看
转自: http://blog.csdn.net/likendsl/article/details/7576549
XCode4.0以后,编译器换成了LLVM 编译器 2.0
与以前相比,更加强大:
1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++.
2.LLVM 速度比 GCC快两倍,建立的程序也会运行的更快. 因为它更好的利用现代的芯片的结构.
3.LLVM和Xcode 4完全的整合在一起.包括关键字高亮,代码完整性等全都是由LLVM语法分析器来分析的. 这样可以在编辑的时候就可以很好的了解你的代码.
编译器进化之后,控制台调试命令前缀,也由原来的gdb更改成了lldb,所以当你看到控制台没有gdb而出现lldb的时候,不用惊慌,因为我们以前常用的调试命令依然可以使用:
使用前提:
1.既然是调试命令,理所当然的,程序模式应该选择Debug模式。
2.在Debug模式下,如果你的程序在运行中崩溃(Crash)掉,那么恭喜你,使用lldb调试的机会来了。
符合以上两个条件之后,控制台(即日志输出窗口All Output)会自动打出一个(lldb)命令,你在其后输入bt,回车。
恭喜你,这时Xcode会自动输出最后的一次调用堆栈。如下:
[cpp] view
plaincopy
* thread #1: tid = 0x1f03, 0x0132edee CoreFoundation`___forwarding___ + 206, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
frame #0: 0x0132edee CoreFoundation`___forwarding___ + 206
frame #1: 0x0132ecb2 CoreFoundation`_CF_forwarding_prep_0 + 50
frame #2: 0x00002e60 testMVC`-[ViewCtrl2 touchesBegan:withEvent:] + 128 at ViewCtrl2.m:40
frame #3: 0x013c9e99 CoreFoundation`-[NSObject performSelector:withObject:withObject:] + 73
frame #4: 0x000ffc49 UIKit`forwardTouchMethod + 268
frame #5: 0x000ffb38 UIKit`-[UIResponder touchesBegan:withEvent:] + 30
frame #6: 0x0003a2cf UIKit`-[UIWindow _sendTouchesForEvent:] + 272
frame #7: 0x0003a5e6 UIKit`-[UIWindow sendEvent:] + 273
frame #8: 0x00020dc4 UIKit`-[UIApplication sendEvent:] + 464
frame #9: 0x00014634 UIKit`_UIApplicationHandleEvent + 8196
frame #10: 0x012b2ef5 GraphicsServices`PurpleEventCallback + 1274
frame #11: 0x0139c195 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
frame #12: 0x01300ff2 CoreFoundation`__CFRunLoopDoSource1 + 146
frame #13: 0x012ff8da CoreFoundation`__CFRunLoopRun + 2218
frame #14: 0x012fed84 CoreFoundation`CFRunLoopRunSpecific + 212
frame #15: 0x012fec9b CoreFoundation`CFRunLoopRunInMode + 123
frame #16: 0x012b17d8 GraphicsServices`GSEventRunModal + 190
frame #17: 0x012b188a GraphicsServices`GSEventRun + 103
frame #18: 0x00012626 UIKit`UIApplicationMain + 1163
frame #19: 0x000026fa testMVC`main + 170 at main.m:16
frame #20: 0x00002645 testMVC`start + 53
当然还有其他的命令(和gdb命令通用):
[cpp] view
plaincopy
命令 解释
break NUM 在指定的行上设置断点。
bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。
continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。
display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
file FILE 装载指定的可执行文件进行调试。
help NAME 显示指定命令的帮助信息。
info break 显示当前断点清单,包括到达断点处的次数等。
info files 显示被调试文件的详细信息。
info func 显示所有的函数名称。
info local 显示当函数中的局部变量信息。
info prog 显示被调试程序的执行状态。
info var 显示所有的全局和静态变量名称。
kill 终止正被调试的程序。
list 显示源代码段。
make 在不退出 gdb 的情况下运行 make 工具。
next 在不单步执行进入其他函数的情况下,向前执行一行源代码。
print EXPR 显示表达式 EXPR 的值。
print-object 打印一个对象
print (int) name 打印一个类型
print-object [artist description] 调用一个函数
set artist = @"test" 设置变量值
whatis 查看变理的数据类型
XCode4.0以后,编译器换成了LLVM 编译器 2.0
与以前相比,更加强大:
1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++.
2.LLVM 速度比 GCC快两倍,建立的程序也会运行的更快. 因为它更好的利用现代的芯片的结构.
3.LLVM和Xcode 4完全的整合在一起.包括关键字高亮,代码完整性等全都是由LLVM语法分析器来分析的. 这样可以在编辑的时候就可以很好的了解你的代码.
编译器进化之后,控制台调试命令前缀,也由原来的gdb更改成了lldb,所以当你看到控制台没有gdb而出现lldb的时候,不用惊慌,因为我们以前常用的调试命令依然可以使用:
使用前提:
1.既然是调试命令,理所当然的,程序模式应该选择Debug模式。
2.在Debug模式下,如果你的程序在运行中崩溃(Crash)掉,那么恭喜你,使用lldb调试的机会来了。
符合以上两个条件之后,控制台(即日志输出窗口All Output)会自动打出一个(lldb)命令,你在其后输入bt,回车。
恭喜你,这时Xcode会自动输出最后的一次调用堆栈。如下:
[cpp] view
plaincopy
* thread #1: tid = 0x1f03, 0x0132edee CoreFoundation`___forwarding___ + 206, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
frame #0: 0x0132edee CoreFoundation`___forwarding___ + 206
frame #1: 0x0132ecb2 CoreFoundation`_CF_forwarding_prep_0 + 50
frame #2: 0x00002e60 testMVC`-[ViewCtrl2 touchesBegan:withEvent:] + 128 at ViewCtrl2.m:40
frame #3: 0x013c9e99 CoreFoundation`-[NSObject performSelector:withObject:withObject:] + 73
frame #4: 0x000ffc49 UIKit`forwardTouchMethod + 268
frame #5: 0x000ffb38 UIKit`-[UIResponder touchesBegan:withEvent:] + 30
frame #6: 0x0003a2cf UIKit`-[UIWindow _sendTouchesForEvent:] + 272
frame #7: 0x0003a5e6 UIKit`-[UIWindow sendEvent:] + 273
frame #8: 0x00020dc4 UIKit`-[UIApplication sendEvent:] + 464
frame #9: 0x00014634 UIKit`_UIApplicationHandleEvent + 8196
frame #10: 0x012b2ef5 GraphicsServices`PurpleEventCallback + 1274
frame #11: 0x0139c195 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
frame #12: 0x01300ff2 CoreFoundation`__CFRunLoopDoSource1 + 146
frame #13: 0x012ff8da CoreFoundation`__CFRunLoopRun + 2218
frame #14: 0x012fed84 CoreFoundation`CFRunLoopRunSpecific + 212
frame #15: 0x012fec9b CoreFoundation`CFRunLoopRunInMode + 123
frame #16: 0x012b17d8 GraphicsServices`GSEventRunModal + 190
frame #17: 0x012b188a GraphicsServices`GSEventRun + 103
frame #18: 0x00012626 UIKit`UIApplicationMain + 1163
frame #19: 0x000026fa testMVC`main + 170 at main.m:16
frame #20: 0x00002645 testMVC`start + 53
当然还有其他的命令(和gdb命令通用):
[cpp] view
plaincopy
命令 解释
break NUM 在指定的行上设置断点。
bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。
continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。
display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
file FILE 装载指定的可执行文件进行调试。
help NAME 显示指定命令的帮助信息。
info break 显示当前断点清单,包括到达断点处的次数等。
info files 显示被调试文件的详细信息。
info func 显示所有的函数名称。
info local 显示当函数中的局部变量信息。
info prog 显示被调试程序的执行状态。
info var 显示所有的全局和静态变量名称。
kill 终止正被调试的程序。
list 显示源代码段。
make 在不退出 gdb 的情况下运行 make 工具。
next 在不单步执行进入其他函数的情况下,向前执行一行源代码。
print EXPR 显示表达式 EXPR 的值。
print-object 打印一个对象
print (int) name 打印一个类型
print-object [artist description] 调用一个函数
set artist = @"test" 设置变量值
whatis 查看变理的数据类型
相关文章推荐
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 一种利用HPI接口调试多片DSP的方法
- gdb调试命令及方法
- iOS崩溃日志crash logs追踪以及调试方法
- iOS指南系列:如何解决奔溃问题-深入调试
- ios 调试技巧收藏二 lldb命令
- 一种调试i2c、spi器件寄存器的方法
- IOS 调试技巧三:help 命令
- 用电脑控制手机,就像运行超级终端的方法,使用的是LINUX命令 可进行手机调试等
- gdb调试命令和方法
- 在上JAVA课时看到了一种的调试方法,帮我把这个循环弄明白了,而且对FOR循环的理解也更深了
- 介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
- 介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
- iOS指南系列:如何解决奔溃问题-深入调试
- gdb调试命令及方法
- .NET下一种简单的调试诊断方法(2)
- IOS 调试技巧一:po 命令
- 解决Oracle中用EXP 命令后用IMP导出数据出现错误的一种方法