iOS_项目完成后测试app

在项目中遇到各种问题:

(1)thread 1:exc_bad_access(code=1,address=0x10)

完全不知道错误出现在哪里。


错误原因:

exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后。再去通过该对象去调用其它的方法就会出现野指针错误。

例如:

Person *jerry = [[Person alloc]init]; // retainCount引用计数为1

[jerry eat]; // 调用吃的方法

[jerry release]; // 释放jerry这个对象到 retainCount引用计数为0

// 此时如果继续引用jerry这个对象就会出现野指针错误,exc_bad_access

[jerry sleep];


解决方法:

首先得定位到哪里出现的这样野指针引用错误,如果是大型的项目代码量一大,找起来是非常痛苦的。

IOS提供了一个环境变量设置来帮忙定位错误位置的信息描述:NSZombieEnabled ,就是
设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释
放的对象发送消息,这个对象就不会向之前那样Crash或者产生一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的
方式消失

因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

例如会出现这样的提示:

[jerry sleep]:message sent to deallocated instance 0x78d7ed0

设置NSZombieEnabled环境变量,XCode4中:

你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将
NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.

或者在 Xcode4 菜单 Product -> EditScheme -> Diagnostics 设置窗口中直接勾上Enable ZombieObjects 即可,Xcode 可用 cmd+shift+< 进到这个窗口。

按照上面的步骤做完后,再次运行程序,不断操作,发现错误是"*** -[SDCycleScrollView scrollViewDidScroll:]: message sent to deallocated instance 0x12db0bac0",错误位置在”[SDCycleScrollView scrollViewDidScroll:]“方法中,后来发现是SDCycleScrollView已经释放,但是SDCycleScrollView的定时器却没有被释放。

时间: 2024-10-23 05:09:27

iOS_项目完成后测试app的相关文章

Mac上搭建Xcode9.0+appium1.6.5过程及链接模拟器测试app

Mac上搭建在ios模拟器上运行测试APP相对在真机上要简单些.不过笔者真的是折腾了2 天了,百度谷歌搜了个遍,大脑快炸了,遇到各种坑,笔者装的是Xode9.0版本, 不过最终还是坚持弄好了.先给大家讲讲完成在模拟器上测试app的详细步骤. 前提: 1.  已安装Xcode8.0及以上 2.  Mac 10.12以上(笔者写文章时的mac最新系统是10.12.6) 3.  已安装appium1.6.5(可以安装桌面版的也可以通过npm命令安装:npm install –g appium) 一. 

移动端测试——APP元素信息[事件]操作API和APP模拟手势高级操作(4)

appium基础API 1.1 APP元素信息操作API 介绍手机端元素信息的获取以及基本的输入操作 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号) desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '9' desired_cap

移动端测试——APP元素定位操作 (3)

一.appium基础API讲解 1.1 APP元素定位操作 建议: 使用显示等待 能用id.class定位就不用xpath定位 只要看的见的,用xpath的text就是万能的 手工测试主要通过可见按钮操作,而自动化是通过元素进行交互操作 元素的基本定位基于当前屏幕范围内展示的可见元素 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号

移动端测试——App基础操作(2)

Appium 1.1 App基础操作 API 完成app自动化需要一些基础条件的支持:APP初始化API 1.1.2 基础操作命令 1. 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号) desired_caps['platformName'] = 'Android' desired_caps['platformVersion']

OSX10.12搭建IPv6本地环境测试APP

##前记最近刚换了工作,生活终于又安定下来了,又可以更博了##正文最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件,因为IPv6的问题.当然网上关于怎么OSX10.11搭建IPv6本地测试APP的博客有了很多,也很详细,我主要谈下OSX 10.12搭建的感触.###首先确定问题是不是在客户端就拿今天我废了九牛二虎之力,因为mac搭建IPv6本地去测试APP,是从OSX10.11之后,才出现的.然而公司的电脑系统

Android手机用WIFI与Android studio连接,真机测试APP

1,手机获取ROOT权限(我的是小米note,直接下载MIUI开发版安装即可) 2,在应用市场下载(终端模拟器),安装. 3,赋予(终端模拟器)ROOT权限.提示:测试其是否有root权限,打开终端模拟器,输入命令:su ,返回不是"permission deny"即次软件获取了root权限. 4,确认你的真机和电脑在同一网段.提示:手机查看连接的wifi的详情即可获取IP,电脑cmd输入ipconfig即可获取IP. 5,打开终端模拟器,依次输入执行如下命令: 6,在电脑上,运行cm

使用TestFlight邀请外部人员测试APP

如何使用TestFlight邀请外部人员测试APP 具体步骤如下: 1.在邀请测试人员的时候,按上线流程打包APP,提交. 2.提交审核,在邀请测试员的时候,你必须先提交审核,苹果会在大约2个工作日审核你的APP: 3.审核通过后,通过iTunes中的预发行,添加测试员,只需要对方的邮箱地址即可: 4.在App Store上现在TestFlight: 5.当你给被邀请人发送邀请邮件的时候,被邀请人会收到一份邮件: 截图如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

程序猿之---C语言细节11(数组下标越界后测试、数组下标中“ ,”运算符,副作用)

主要内容:数组下标越界后测试.数组下标中" ,"运算符,副作用 #include <stdio.h> int main(int argc, char ** argv) { int a[2]={1,2},b[2] = {3,4};//输出未知值 int i = 0; printf("%d\n",b[0,2]); //逗号为一种运算符,b[0,2]被当成b[2],在这里b[2]是超出 // 了下标,但是输出为1,是a[0]的值(通过改变a[0]的值输出也改变

Android测试(一):在Android中测试App

Android测试(一):在Android中测试App 发布时间 2017年12月20日 虫师 原文:https://developer.android.com/training/testing/index.html 测试你的App是开发过程中的重要组成部分.通过对应用程序持续的运行测试,你可以验证程序的正确性.功能和可用在发布之前. 测试还提供了以下优点: 快速反馈失败. 开发周期的早期问题检测. 安全地重构代码,让你优化代码而不用担心回归. 稳定开发速度,帮助你减少技术债务. 这里的特指测试