通常大家都怎么对待编译 warning 和 Analyze 报告的错误?

2012-06-03 23:16:39 +08:00
 Elfe
我刚开始参与的这个项目,有100个编译warning和97个Analyze错误。目前我收到一个很没头绪的任务:来,把这些不能稳定重现的闪退问题都来研究一下吧。
晕。我一没有repro steps,二不熟产品代码,三就连iPhone开发也是新手,给我这种任务,也太瞧得起人了吧。
按以前的习惯,肯定是要把所有的编译和Analyze错误都给清空再说。不过,不想贸贸然对别人的代码进行很多改动,所以想先打听一下:在iOS开发中,大家都把这些警告、错误当回事么?
另外就是:估摸着这些闪退就是某些对象被提前释放了。在iOS开发中,除了打开Zombie Objects外,还有什么有效的手段或工具么?
4339 次点击
所在节点    iDev
12 条回复
Livid
2012-06-03 23:22:30 +08:00
起步时间越早,规模越大的 codebase,在最新版本的 Xcode 中的各种 warning 就会越多⋯⋯

如果不会造成 crash 的话,还是可以安全忽略的。
Elfe
2012-06-03 23:27:46 +08:00
@Livid 那对于 Analyze 报告的问题呢?
目测,大量 warning 还是无关紧要的,Analyze 上的可能有些确实是 crash 的元凶。
另:有没有 suppress 某一特定 warning 的方法?这样就可以把那些安全的确实有理的 warning 给压制了让它们别在警告栏中出现。
Livid
2012-06-04 00:20:10 +08:00
@Elfe Analyze 报告的 potential leak 确实需要看看,有的时候确实是 bug。
sharkli
2012-06-04 08:17:30 +08:00
崩溃的原因大多是收到内存warnning没有处理。你使用模拟器的模拟内存警告,把每个界面测试一下。收到内存警告如何处理,查下文档。个人经验仅供参考。
adow
2012-06-04 10:30:06 +08:00
如果清楚的知道warning 的原因有些是可以忽略,analyze里很多都是potential leak确实需要仔细分析,在内存警告的时候很有可能就爆发出来了。
shinyzhu
2012-06-04 11:07:51 +08:00
我有强迫症

写好一个代码块/功能之后会主动跑一下Analyze,有提示就解决掉。

到后来基本上没有Analyze的警告了。
leafduo
2012-06-04 14:00:13 +08:00
我是废死力也要干掉全部警告的那种。

最近一个 LaTeX 警告总搞不定让我很抑郁 = =
xuming
2012-06-04 14:04:36 +08:00
自己写的代码里的warning和error肯定要清除的,第三方的代码,就看情况了,一般warning问题不大的。
Elfe
2012-06-04 22:53:39 +08:00
@adow iOS 代码里如何忽略某一具体警告?我是指忽略某一特定规则针对某一行/段特定代码的警告。同样这条规则在其它代码中的不要 suppress,同一段代码中其它规则检查的警告也不要 suppress。
adow
2012-06-05 11:21:53 +08:00
@Elfe 我不知道是否有特定规则,比如在我的一个不大的项目里,有两处warning,有一处是因为我调用了UITextView的一个非公开的styleString方法,编译的时候提示'UITextView' may not respond to 'styleString',我想是因为styleString非公开的所以才提示这个,但是运行的时候他起作用了,也通过了app store审核。还有一处是我在实现单实例模式时候时在release方法中写成了:
-(void)release{
return;
}
他希望我先调用一下[super release],所以给我warning.
我的意思是,我知道这两处warning的原因,也知道会产生的后果,所以我可以忽略。
我的项目中还有两处analyze的警告,都是Potential leak of an object allocated,他们在我使用的第三方的MTStatusBarOverlay.m里,我不想去改他,我在instruments里运行了一段时间也没看到那个泄露,所以我也忽略了他。
Elfe
2012-06-05 13:34:26 +08:00
@adow 我的意思是让可以安全忽略的警告不要在左边窗口中显示出来。
在C#中是这样的:对于可以忽略的警告,可以在方法/属性/类/全局的范围添加一句
[SuppressMessage rule="[the rule ID e.g. CA001]" justification="[the reason why choose to ignore the error here]"]
这样在编译的时候我就不会再看到这条错误。
这么做有两个好处:
1,我可以强制 treat warning as error,从而从流程提升整个团队代码的质量
2,对于那些可以安全忽视的警告,我只需要思考一次就够。不至于在今后每次编译的时候我都要检查一下是不是多了几个警告,还得仔细找出多了哪几个
adow
2012-06-05 14:29:05 +08:00
原来还可以这样,我从来没想到过

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/38303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX