good
1.选中Xcode先把程序(command + R)运行起来
2.再选中Xcode,按快捷键(command + control + i 菜单在Product->Profile)运行起来,此时Leaks已经跑起来了
3.由于Leaks是动态监测,所以我们需要手动操作APP,一边操作,一边观察Leaks的变化,当出现红色叉时,就监测到了内存泄露,点击右上角的第二个,进行暂停检测
4.下面就是定位修改了,此时选中有红色柱子的Leaks,下面有个"田"字方格,点开,选中Call Tree
5.下面就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree 和Hide System Libraries
6.选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处
7.找到了内存泄露的地方,那么我们就可以修改即可
在警告中找到错误,然后升级设置
一、file was built for archive which is not the architecture being linked (armv7s)
项目是基于cocos2d-x绑定lua进行开发的,需要引用liblua.a静态库,编译的时候报上面的错。需要将liblua项目中的build Settings配置项中的“Build Active Architecture Only”改为YES (是否只编译当前适用的指令集)
【3.异常断点】
断点的功能不限于上面所述。开发iOS知道,如果我们因为异常然后程序crash了,代码就直接跑到main.m的main函数中去了。为什么就不能跑到出现异常的代码中呢???异常断点就为我们解决该问题,程序就会在异常出现的那行代码终止。
【4.符号断点Symbolic Breakpoint】
符号断点的创建也同异常断点。一般符号断点可以在你指定的[类名 方法名]时中断执行。
【5.Analyze分析器】
Analyze分析器是一种静态的工具,可以对我们的程序进行分析,找出我们未使用的变量,或一些死存储。执行Analyze如下:Product-->Analyze. 如下蓝色的标记就是静态分析的结果。
【7.僵尸对象】
iOS中把那些已经release但还没完全消失的对象叫做僵尸对象,对已经 release的对象再次释放,就会发生异常。虽然自从使用ARC后,由于对象释放产生的异常已经大大变少,但偶尔还会出现。开启僵尸对象模式后,就能快 速定位到异常位置。开启方式如下:Product-->Scheme-->Edit Scheme. 勾选Enable Zombie Objects即可。
【11.查看代码运行时间】
有时候我们想要准确的知道某段代码、某个循环执行的时间,然后分析效率等问题,这个时候就需要执行时间是多少。正好看到网上已经有人做了这个工作,我就直接摘下来了。正好也用了宏的方式计算时间,我们只要在需要计算时间的代码块前后写上TICK,TOCK宏即可。
【14.视图调试】
如今iOS开发的UI设计有很多种方式,比如storyboard,xib, 代码实现。对于stoayboard,xib可视化实现是比较简单的,但是对于一些“iOS老程序员”而言,都喜欢使用代码实现UI,并且可能UI层次还 比较复杂。这样就给我们新接手项目的开发者带来很多困扰。如何快速查看一个复杂UI的界面层次和布局,最快的方法就是用到视图调试。
当项目运行到某一个界面(可以是模拟器或真机)时,开启视图调试
红警
摘录:
iOS中运行App过程中如果发生程序崩溃,会生成一个崩溃日志文件。这个文件会保存的特定系统目录下,扩展名是crash。当手机连接到iTunes时,会将该文件同步到电脑上。
在Mac系统中这些文件会同步到“~/Library/Logs/CrashReporter/MobileDevice”下。
而在Windows系统中会同步到“C:\Users\\AppData\Roaming\Apple computer\Logs\CrashReporter/MobileDevice”(Vista或以上)或“C:\Documents and Settings\\Application Data\Apple computer\Logs\CrashReporter”(XP)。
一般崩溃日志头部有如下字段
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x20000008
Crashed Thread: 0
其中Exception Type是异常类型,Exception Codes是异常代码。Crashed Thread指示异常的线程编号。上面表示Crash的线程编号是0(主线程的线程编号是0)。
崩溃分为:
一般内存等系统异常Crash线程信息
程序抛出的异常的日志。 看 Last Exception Backtrace 部分
摘录:
崩溃日志位置
1. 找到Symbolicatecrash文件 -- 符号化( symbolication)
Xcode 4.3的之后
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/
Xcode 4.3之前
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
终端中输入以下命令
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
Xcode抛出异常的疑难杂症 新手求解 http://www.cocoachina.com/bbs/read.php?tid=72698
http://blog.csdn.net/xinruiios/article/details/8685512
Implicit declaration of function 'inet_aton' is invalid in C99
解决办法:-std=gnu99的编译选项,#import <arpa/inet.h>。
lldb命令 bt 打印调用堆栈,是thread backtrace的简写
po [$eax name] po [$eax reason]
im loo -a 0x12f54 (最小的地址)
(lldb) im loo -a 0x3e294
Address: BaiduMobStatSample[0x0003e294] (BaiduMobStatSample.__DATA.__cfstring + 768) Summary: @""
im loo -a 0x00007aba
Address: BaiduMobStatSample[0x00007aba] (BaiduMobStatSample.__TEXT.__text + 19994) Summary: BaiduMobStatSample`main + 170 at main.m:17
http://www.2cto.com/kf/201306/218567.html 打开断点导航面板,设置一个异常断点。打开断点导航面板,点击左下角的“+”按钮,选择Add Exception Breakpoint,接受默认设置
http://blog.sina.com.cn/s/blog_8d1bc23f0102uz9d.html
(
其中的一段:
1.假如崩溃在main.m里面,就可以设置全局异常断点(Exception Breakpoint)。
2.在异常断点开启的状态下,你也没有得到得到有用的信息。在这种情况下,多继续几次运行这个app,或者在调试提示后面输入“po $eax”命令。
3.大多数崩溃的一般原因和一些bug都是在你的xib中或者storyboard中的连接丢失了或者是错误的连接。这些情况不会在编译错误里面显示,因此你一般不知道。
4.不要忽略编译警告。假如你有编译警告,就说明你有些东西可能会出错。假如你不知道为什么你会到一个编译警告,最好去搞明白它. 这些都是安全的做法!
5.在设备上调试可能会和在模拟器上面有些微的不同。这两个环境不是完全一样,你将会得到不同的结果。
)
Adding an Exception Breakpoint