Xcode的控制台调试命令
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会自动输出最后的一次调用堆栈。如下:
- * 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命令通用):
- 命令 解释
- 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 查看变理的数据类型
使用lldb调试工具,结合上文解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled一起使用,实在是查找crash的一大利器啊,很是方便!
http://blog.csdn.net/likendsl/article/details/7576549
Xcode的控制台调试命令的更多相关文章
- 手机抓包xcode自带命令行工具配合wireshark实现
三.最佳方式:rvictl命令 优点:简单,而且可以抓所有网络接口的数据: 缺点:似乎没有,要求手机iOS5以上不算要求吧?如果说缺点,就是这个命令是Xcode的Command Line Tools ...
- 关于XCode 的agvtool命令行
简介:用agvtool如何来自动更新版本号和bulid version agvtool是一个命令行工具,允许你自动递增到下一个最高的数量或具体的数字这些数字.本文档提供了更新您的构建和版本号码使用 ...
- Xcode 的expression命令
expression命令是执行一个表达式,并将表达式返回的结果输出,是LLDB调试命令中最重要的命令,也是我们常用的 p 和 po 命令的 鼻祖. 他主要有2个功能 (1) 执行表达式 举例:改变视图 ...
- 利用终端统计 Xcode代码数量命令
直接利用终端命令进入工程文件夹然后写下或复制以下命令 find . -name "*.m" -or -name "*.h" -or -name "*. ...
- Xcode界面简介
创建 Object-C 程序 进入主界面方式 : 打开 Xcode 之后, 可以使用 Xcode 菜单, 但是必须创建一个 Object-C 工程 或者 导入 一个 Object-C 工程才可以进入主 ...
- 【IOS 开发】Object-C 入门 Xcode 环境具体解释
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 project ...
- 【IOS 开发】Object-C 入门 Xcode 环境详解
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...
- lldb调试命令
XCode4.0以后,编译器换成了LLVM 编译器 2.0 与以前相比,更加强大:1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++.2.LLVM 速度比 ...
- Mac OS X 中一些常用的命令行技巧
一.网络设置相关 1.网卡的物理地址的动态重置 出于某些需求,例如网络中的 IP 地址或网络帐号与网卡物理地址绑定,使得多个设备无法切换上网,可尝试临时更改物理地址.不过,系统偏好设置是不能修改网卡物 ...
随机推荐
- centos6.5静态IP和DNS设置
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0EVICE=eth0HWADDR=60:02:92:62:30:2ATYPE=EthernetBROA ...
- Camus导入中文乱码问题(源码修改、编译、部署、任务启动)
Camus使用过程中业务方反映从Kafka导入至HDFS中的数据有中文乱码问题,且业务方确认写入的数据编码为UTF-8,开始跟进. 问题重现: (1)编写代码将带有中文的字符串以编码UTF-8 ...
- (转载)vsftpd简易配置
(转载)http://licong.blog.51cto.com/542131/145748/ 写篇关于vsftp配置的文章,加深自己的记忆,便于自己查阅,同时也希望能给其他需要的朋友一点借鉴.本文如 ...
- 使用Struts2开发Java Web应用程序(目录)
连接地址 http://blog.csdn.net/struts2/article/details/1721752
- bzoj 2819 Nim(BIT,dfs序,LCA)
2819: Nim Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1596 Solved: 597[Submit][Status][Discuss] ...
- 合并两个rs结果输出
<%Const SqlDatabaseName = "DNN625" ' 数据库名字' Const SqlPassword = "123456& ...
- Anjuta 调试无输出 warning: GDB: Failed to set controlling terminal
调试无输出,起初以为是那个warning的问题,后来才知道这个系统printf直到遇到'\n'换行符才输出,VC6用习惯了没想到还有这样的,网上说这样是节省系统资源. 那个warning暂时还没看到影 ...
- VM虚拟机下在LINUX上安装ORACLE 11G单实例数据库
1.环境及安装前规划:虚拟机及OS如下 环境:VMware Wordstation ACE版 6.0.2 操作系统:OracleLinux-R5-U8-Server-i386-dvd 3.2G ...
- 公司框架将入参Map化
1.Map<String,Object> map = BeanUtil.describe(inDto);
- 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法
using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Stu ...