[iOS] Xcode调试技巧 & 弱网等

很懒的我决定把之前的杂项分个类了...

目录:

  1. Xcode快捷键
  2. 调试看到都是nil,print告诉你variable not available
  3. 模拟弱网调试
  4. 控制台看log
  5. 内存泄漏 Memory Graph
  6. crash log符号化
  7. Xcode模拟定位
  8. Instruments性能检测
  9. 筛选编译错误

1. Xcode快捷键

快速查找类:command+shift+o
一秒格式化:ctrl + i (注意command + i 是profile哦)
一秒多行注释:command + option + /
快速在左侧文件树中显示当前文件位置:command + shift + j


2. 调试看到都是nil,print告诉你variable not available

把优化等级改为none就好啦~


image

3. 模拟弱网调试

可参考:https://www.jianshu.com/p/b52448f56c96

这周的一个需求和弱网有关,以前都是用Charles的throttle来模拟弱网的,但是其实iOS自身手机上就可以选弱网模拟哦~

打开settings->developer->network link conditioner->very bad network即可:


弱网设置
  • 这里每个参数的含义大致如下:

in bandwidth 下行带宽即下行速率,是指网络向用户电脑发送信息时的传输速率,例如下载速度
in packet loss 下行丢包率丢失数据包数量占所发送数据组的比率
in delay 下行延迟,单位为ms收到数据包晚一会给自己用
out bandwidth 上行带宽上传数据速度
out packet loss 上行丢包率
out delay 上行延迟
DNS delay DNS解析延迟,这个功能安卓不知道怎么模拟
protocol 协议,可选Any,IPv4,IPv6
interface 接口,可选ALL,Wi-Fi,cellular(蜂窝网)

  • Tips:

Charles throttle只能hook http协议的网络请求,但是有些网络传输是基于RTMP,所以Charles不能控制这类请求的网速,因为Charles是一个HTTP代理服务器,所以这种情景只能用手机自身的网络限速。

那么如果Android也想限速怎么办呢?测试小姐姐通过让Android机连iOS的代理,iOS开启网络限速来实现滴~


4. 控制台看log

有的时候测试小姐姐需要验证一些东西,但是又不能xcode断点或者日志看,就可以用到控制台啦~

以及debug冷启动的push之类的时候不能打断点,就可以通过log来看了

下面是我手机控制台的日志,可以看到wechat之类的日志,这里的日志也是可以搜索的哦~


控制台

那我们要干点什么来让app能在控制台打log呢?
其实直接NSLog就可以啦~~


5. 内存泄漏 Memory Graph

内存泄漏的检查工具有好多啦,例如MLeaksFinder之类的,但是除了形成了cycle互相持有的那种,其他如果单纯知道了某个对象leak了,如何知道是什么持有了它呢?

Xcode有个很好用的工具,就是Memory Graph,可以看到现在的各种对象的持有关系:


memory graph

通过这个东东就能从左边找到你想知道有木有泄漏的对象(filter),然后右边就会出现它的持有关系啦~ 是不是超级棒!!

--

6. crash log符号化

参考:https://www.jianshu.com/p/12a2402b29c2 (会有异常信息啥的总结) & http://www.cocoachina.com/articles/8418 (只是符号化的三种方法)

QA小姐姐们给的.crash或者.ips文件(憋纠结这两个文件有什么差,改下后缀名就ok),用文本编辑器打开文件是一堆十六进制的内存地址,你会郁闷的发现压根看不懂:

未符号化的crash
  • Q:十六进制内存地址可以改成看得懂的么?

A:当然,将这些十六进制地址转化成方法名称和行数的过程称之为Symbolication(符号化)。符号化很简单,只要你把你的.crash文件拉到上面提到过的Xcode的device log里面,然后几秒钟后就会符号化。但是这里有个前提,就是这个发生crash的版本包必须是你自己的Xcode里面Archive出来的(这个是苹果自带的方法,会自动检测是否含有匹配的.dSYM文件和应用二进制文件)。

  • Q:那如果要是在新电脑上也想符号化怎么办?

答案是,只有相匹配的.dSYM文件和应用二进制文件就可以符号化。必需完全匹配才行。否则,日志将无法被完全符号化。

那么我们就来看一下如果通过dSYM符号化吧~ 最简单的就是xcode会自动符号化你电脑当前的版本app的crash,如果不是的话我一般是命令行。

把你的crash文件以及拷贝symbolicatecrash(可以电脑全局搜这个文件,在xcdoe目录下)文件到当前目录、XXXX.dSYM放到同一个目录下,然后cd到这个路径,先执行export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer,然后执行:

symbolicatecrash appName.crash appName.app > appName.log 

然后你在看的的就是酱紫的啦:


符号化以后的crash

7. Xcode模拟定位

参考:https://www.jianshu.com/p/490622baba41

这个是我们测试小哥哥问我的,我就找了一下,通过这个可以定位但是如果app是通过手机号or网络判断国家的就没用哈

改的方式超级简单,edit schema即可~


改schema的模拟定位

8. Instruments性能检测

instruments有个工具叫做Time Profiler,他可以把运行的app里面那步占多少时间都展示出来,但是很神奇如果直接run起来看到的就是类似酱紫的:

带有16进制的详情

最左边其实就是这步的耗时,展开可以看里面每小步的耗时,但是很神奇为啥我们看到的函数名都是十六进制的呢,这个其实就和crash log是类似的,如果你想让看起来是正常的需要改一下build setting哈~

解决十六进制

(参考:https://www.jianshu.com/p/ab9c36d0a218

这里有几个注意点哈:

  • 如果你的项目有Pods,那么Pods里面额build setting也要改成DWARF with dSYM File,反正就是你能找到debug information format的地方就都改了
  • 改完如果还是十六进制,那么重新Profile一下(Command + I or 或者菜单里面查Profile)
  • 如果还不行就重启Instruments

然后就会变成酱紫啦~ 这里由于防止外露就遮掉了部分,但反正打开折叠都是你看得懂的英文字母啦,然后你就可以找到耗时多的进行优化了~~

符号化以后的

关于Time Profiler使用还可以参考:https://my.oschina.net/u/2361492/blog/1539353


9. 筛选编译错误

每次build如果出错从一堆warning里面找error好痛苦,其实只要点一下就可以啦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容