美文网首页iOS开发
静态分析的一些总结

静态分析的一些总结

作者: Tsui_YuenHong | 来源:发表于2017-07-26 22:23 被阅读53次
  1. xxx is a garbage value

    问题描述:这个错误一般是使用一个变量前可能没有赋值引起的。

    解决方案:每次声明变量都要赋初始值(nil or 0 or 适当的值)。

  2. 1st argument .. is an uninitalized

    问题描述:传参的参数可能是没被初始化。

    解决方案:传参要保证参数是被初始化过的。

  3. nil returned from a method that is expected to return a non-null value

    问题描述:这个错误出现主要集中于 UITableViewCell 的创建或 switch x 来选择性赋值一个变量,典型例子如下。

        UITableViewCell *cell = nil;
        if(a)
        {
            cell = ...;
        }
        else if (b)
        {   
            cell = ...;
        }
        return cell;
    
        NSString *string = nil;
        switch (x) {
        case 1:
            string = ...;
            break;
    
        default:
            break;
        }
        return string;
    

    解决方案:例子1的解决方法建议加上 else 条件来赋一个默认的 [[UITableViewCell alloc] init]。而例子2则建议 string 赋空字符串,这样 switch 的条件为空或者 default 忘记填了也保证有值返回。

  4. 由 3 延伸的问题假设 switch 的是枚举类型

    问题描述:由于枚举类型设计没有默认值,导致枚举变量赋什么值都不合适。

    解决方案:枚举设置必须含有默认值。

        typedef enum : NSUInteger {
            xxTypeDefault = 0,
            xxTypeA,
            xxTypeB,
        } xxType;
    
  5. xx is undefined operation

    问题描述:左移位数超过被移动对象的字节长就会提示这个 warning。

        int n = 31;
        int a = 1 << (n + 1);
        int b = 1 << 32;
        int c = 1 << 31;
        c = c << 1;
        debug print :
        1
        1606416072
        0
        release print:
        1606416072
        1606416072
        0
    

    出现上面结果的详细原因不作探讨,也不必探讨,因为对于不同编译器出现的结果是不同的,而且对于 undefined operation 的行为是不可预测的。

    解决方案:移位操作要对移动位数做判断,对于 int 来说就是大于等于0而且小于32。

  6. API 安全性

    问题描述:rand() or strcpy()

    解决方案:rand()->arc4random(),strcpy()->strlcpy。

    arc4random是真正是伪随机数算法,不需要随机种子。

    strlcpy保证copy后的字符串后带有'\0',而且不会出现 buffer overflow 导致的 crash。

  7. value store to xxx is never read

    问题描述:变量被初始化后没有被使用。

    解决方案:1.删除该变量 2.使用关键字 "__unused" 修饰

  8. Potential leak of object

    问题描述:潜在内存泄漏,当需要返回值类型是 CFXXX 或者是其他需要手动管理内存的变量的时候,因为需要在当前类之外释放该变量,Xcode 会提示你释放了不属于自己管理的对象。

    解决方案:在改返回 CFXXX 的函数后加上 CF_RETURNS_RETAINED 或 将该函数命名前加上 new。

  9. 查看变量内存分配在不在栈

    lldb 下使用 register read,记录当前 sp 地址
    debug 窗口右键该变量选择 View Memory Of XXX 获取当前变量内存地址
    比对与 sp 地址的大小差距,比 sp 大在栈,比 sp 小不在栈(在堆或常量区...)

相关文章

  • 静态分析的一些总结

    xxx is a garbage value问题描述:这个错误一般是使用一个变量前可能没有赋值引起的。解决方案:每...

  • 静态分析总结

    反病毒引擎扫描 分析前,最好拿多个反病毒软件扫描下这个文件,帮助分析 哈希值 唯一标识,常用算法MD5算法,SHA...

  • iOS-39-内存泄漏的检测方式

    1.静态分析 使用XCode分析功能,Product->Analyze使用静态检测可以检查出一些明显的没有释放的内...

  • RE 逆向工程初学者指南:方法和工具

    简评: RE 两种分析,静态、动态。好好分析静态因为能够解决 70 % 的问题。介绍了一些工具和方法。Enjoy ...

  • RE 逆向工程初学者指南:方法和工具

    简评:RE 两种分析,静态、动态。好好分析静态因为能够解决 70 % 的问题。介绍了一些工具和方法。Enjoy y...

  • 静/动态内存检测工具

    静态内存分析 动态内存分析 关于Instruments-Leaks工具的归纳总结 前言: 本篇文章,在于学习,我把...

  • 怎么复盘

    复盘是现在流行的新名词,但是我觉得这和之前的上学时的总结差不多,只不过总结是静态的,回顾之前的结果,做个静态分析,...

  • Xcode 静态分析与内存泄漏检查

    一、静态分析 Xcode -> Product -> Analyze 即可进行静态分析。Xcode 静态分析能发现...

  • Xcode 静态分析与内存泄漏检查

    一、静态分析 Xcode -> Product -> Analyze 即可进行静态分析。 Xcode 静态分析能发...

  • C/C++怎么做好代码静态分析

    代码静态分析 代码静态分析是指在不运行代码的情况下根据代码的静态信息,对代码的各个维度进行分析。 代码静态分析一般...

网友评论

    本文标题:静态分析的一些总结

    本文链接:https://www.haomeiwen.com/subject/zwcakxtx.html