精华内容
下载资源
问答
  • 龙龙内存遍历工具

    2013-03-12 19:57:17
    安全绿色的软件下载,无病毒,无插件,无恶意代码 我们将会给你提供最新,最酷的软件,书集教程,游戏 等等..
  • 两款很好用的内存遍历工具,遍历速度超快,压缩包内附带截图。
  • 这个不多说,内存遍历,我本来用来查游戏内在的。用过就知道了
  • 外挂学习之路(3)--- 内存遍历工具

    万次阅读 2017-02-06 20:11:40
    一旦找到人物血量, 一般来讲这个人物的其他相关属性也在附近,...介绍两个常见的内存遍历工具,龙龙内存遍历工具和结构化内存监视器。 利用这个方法可以找到一些难以找到的内存,比如人物的姓名等不容易更改的属性。

    一旦找到人物血量, 一般来讲这个人物的其他相关属性也在附近,这样遍历内存一个一个枚举和人物的相关属性一一对应就好了。介绍两个常见的内存遍历工具,龙龙内存遍历工具和结构化内存监视器。

    利用这个方法可以找到一些难以找到的内存,比如人物的姓名等不容易更改的属性。

    展开全文
  • 龙龙内存遍历

    2012-06-02 15:47:32
    龙龙1.0版本的只支持7个偏移,加上两个遍历偏移。只是在内存偏移上加强了,还是要用CE什么的搜索地址才可以。 ...遍历工具(大家用到的可能不多,但是非常有用可以帮助大家测试最后的结果是否正确)
  • APPCrawler基础教程 【转自】https://blog.csdn.net/qq_43317270/article/details/83104979 一、背景 一年前,我们一直在用monkey进行Android 的稳定性测试 ,主要目的就是为了测试app 是否会产生Crash,是否会有...

    APPCrawler基础教程

    【转自】https://blog.csdn.net/qq_43317270/article/details/83104979

    一、背景

    一年前,我们一直在用monkey进行Android 的稳定性测试 ,主要目的就是为了测试app 是否会产生Crash,是否会有ANR,页面错误等问题,在monkey测试过程中,实现了脱离Case的依赖,但是monkey测试完全随机、不可控,并且只支持Android系统,不支持iOS系统;然而在我们不断的实践中发现,monkey测试已经不能满足于我们的部分业务需求,比如说我们想让稳定性测试更灵活、跨端支持iOS、日志可读、定向场景设计、测指定页面的稳定性、报告清晰展示遍历结果等等,monkey在这些方面的实现局限性很大,经过我们调研发现开源工具appcrawler已然支持这些方面,在我们最近几个版本的appcrawler使用过程中,能够满足我们复杂的业务测试需求,弥补了monkey测试的不足,下面我详细的介绍这个自动化UI遍历工具-appcrawler。

    二、appcrawler UI自动化遍历工具介绍

    appcrawler,使用Scala编程语言运行在JVM上,它是基于app爬虫的思想,逐渐形成了一种自动化测试方法称为“UI遍历”,其主导思想是尽可能多的去操作被测app的界面元素,每个元素至少操作一遍。支持android和iOS,支持真机和模拟器,最大的特点是灵活性,可通过配置来设定遍历的规则,用于自动化回归测试,实现对整个APP的所有可点击元素进行遍历点击。

    自动遍历的价值

    1. 回归测试,遍历基本的界面,了解主要界面的可用性,比如兼容性,基本功能;
    2. 利用遍历获取app的加载时间和性能数据,需要借助其他的性能数据抓取工具,比如OneApm,NewRelic;
    3. 利用遍历验证app的内存泄漏以及稳定性等功能,需要借助LeakCanary和MLeaksFinder;
    4. UI diff 验证新老版本的功能差异,并识别细节的问题; 抓取接口请求
      辅助验证一些模块基本接口,并辅助分析接口调用流程,为接口测试做准备;

    三、为什么用这个工具

    1. 支持android和iOS,支持真机和模拟器;
    2. 可通过配置来设定遍历的规则(比如设置黑名单和白名单,提高遍历的覆盖率);
    3. 其本身的遍历深度覆盖较全,比如它拥有APP的dom树,根据每个activity下的可点击元素逐个点击,比monkey更具有规律性,覆盖更全面;
    4. 生成的报告附带截图,可以精确看到点击了哪个元素及结果,对crash类的问题定位清晰;
    5. 各大云市场上自动遍历功能都多有限制企业无法自由定制.;
    6. 解决monkey等工具可控性差的缺点;
    7. 发现深层次的UI兼容性问题;
    8. 通过新老版本的diff可以发现每个版本的UI变动范围;

    四、设计理念
    appcrawler UI遍历基于app爬虫思想,为了更好的认识app爬虫,这里先介绍一下网络爬虫,在了解网络爬虫框架之后,您将会对app爬虫有一个清晰的认知。

    网络爬虫
    通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。这里主要对爬虫以及抓取系统进行一个简单的概述。

    一、网络爬虫的基本结构及工作流程

    一个通用的网络爬虫的框架如图所示:

    网络爬虫的基本工作流程如下:

    1.首先选取一部分精心挑选的URL放入种子URL队列中;

    2.将种子URL队列中URL放入待抓取URL队列;

    3.从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

    4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

    抓取策略:

    在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面介绍两种常见的抓取策略:

    1.深度优先遍历策略

    深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。我们以下面的图为例:

    遍历的路径:A-F-G E-H-I B C D

    2.广度优先遍历策略

    广度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以上面的图为例:

    遍历路径:A-B-C-D-E-F G H I

    app爬虫
    app爬虫比web端更容易抓取,大部分也都是http/https协议,返回的数据类型大多数为json。也就是指app爬虫会先抓取启动app后初始页面的所有URL,然后再选择其中一个URL进行抓取,然后读取URL、解析URL、执行URL,下面对app爬虫做详细的概述。

    一个app爬虫的基本结构及工作流程、通用的app爬虫的框架如图所示:

    为了更好的理解app爬虫思想,下面app爬虫的工作流程中,括号中内容时结合业务做的解述。

    app爬虫的基本工作流程如下:

    1.进入app,首先获取当前BaseURL,支持类型:http、https、ftp、file(比如启动百度外卖app后有N个url);
    2.将这些URL放入待抓取的队列(待抓取即待遍历,也就是说有些元素点击后会生成新的url);
    3. 从待抓取的队列中取出即将抓取(待遍历)的URL,读取URL,并解析attribute、Label、name放入堆栈中;
    4.遍历(执行)已抓取URL中的所有元素,分析当前URL队列是否包含baseURL,如果包含则清空堆栈记录重新计数(分析其中的其他URL,并将URL放入待抓取(待遍历)的URL队列中,从而进入下一个循环),如果不包含,则使用当前页面,不再记录堆栈;

    抓取策略:

    appcrawler中的采取的抓取策略是:深度优先策略(其中遍历深度可配置)

    五、appcrawler技术要点解析

    5.1 appcrawler和appium 的关系
    5.1.1 appium支持
    appcrawler在selenium2.0支持的基础上做了一个针对appium的封装,类名叫MiniAppium,他具有如下的特色。

    设计极简,除了selenium的自身支持外,增加了几个API用于app的测试;
    封装了appium命令的启动停止
    强大的断言

    5.1.2 AppiumClient.Scala负责与appium交互
    1.监听appium进程的信息(执行成功,执行失败,停止等),从appium获得包名和activity
    2.通过xpath找到组件,对重名的id只使用第一个。每隔5秒找一次,找10次后如果还找不到,则放弃
    3.对组件的操作(如:滑动,点击,长按等)进行定义,动作是随机取的(类似monkey,方法名也叫monkey),位置信息用的是通过xpath找到的x,y坐标
    4. 对每次操作之后的界面截屏(如果界面改变的话)
    5.获取页面结构(最多3次)解析xpath的时候拿到一个节点树,对树中所有节点遍历,具体实现在TreeNode.scala和Tree

    5.1.3 appium关键字
    在selenium支持的基础上只增加了少数几个方法.:

    see:元素定位与属性提取

    tap:点击

    send:入文本

    swipe:滑动

    原来scalatest的selenium的支持仍然全部可用. 比如click on id(“login”)

    具体用法如下:

    1. see()

    唯一的元素定位API,see是引用了<阿凡达>电影里面一句台词"I See You",它的作用是当你看到一个控件, 你应该可以根据看见的东西就可以定位它,并获取到这个控件的属性, 无须借助其他工具或者使用findElementByXXX之类的函数,比如有个Button, 名字是"登录",它的id是account,定位它可以通过如下多种方式的任何一种:

    • see(“登录”)
    • see(“登”)
    • see(“录”)
    • see(“account”)
    • see(“acc”)
    • see("//UIAButton[@id=“account”]")
    • see(“screen_name”)(“text”)
    • see(“screen_name”).nodes.head(“text”)
    • see(“action_bar_title”)(“text”) 文本
    • see(“action_bar_title”)(“tag”) 类型
    • see(“action_bar_title”)(“selected”) 是否选中

    如果当前界面中存在了有歧义的空间,比如其他一个名字为"登录"的输入框, 那么上述定位方法中定位中两个控件的定位方法会失败, 你需要自己调整即可,这就是关于元素定位你只需要用see这个方法即可。

    1. 动作 tap send swipe

    目前只封装了3个动作. tap 、send 、swipe.
    see(“输入手机号”).send(“13067754297”)
    see(“password”).send(“xueqiu4297”)
    see(“button_next”).tap()

    支持链式调用. 当然不推荐日常使用

    //对三次连续出现的tip控件点击三次.
    see(“tip”).tap().tap().tap()
    see(“输入手机号”).send(“13067754297”).see(“password”).send(“x297”)

    1. 断言

    支持标准的scalatest的should风格的断言,支持两种风格的断言
    assert风格
    assert(2>1)

    5.2 测试执行
    1.定义URL
    界面唯一性:每个screen都有一个唯一的id,这样如果在报错的截图中就可以很容易找到那个url,如下图所示
    android的url默认为当前的activity名字
    iOS没有activity概念,默认使用当前页面dom的md5值的后五位作为标记,如果页面不变,那么这个md5值也不会变
    也可以自己指定某些特征作为url,比如title或者某些关键控件的文本
    控件的唯一性取决于这个url和控件自身的id name tag text loc等属性
    比如一个输入框id=input,在多个页面中都出现了
    如果url为空,那么它只会被点击一次
    如果url设置为当前activiy的名字,那么有多少页面包含它他就会被点击多少次
    url的定义是一门艺术,可以决定如何优雅的遍历

    2.遍历控制
    遍历控制依赖于项目目录下的配置文件Baiduwaimai.yml, 里面有详细的注释解释每个配置项的作用

    3.如何写配置文件Baiduwaimai.yml(运行的核心所在)
    配置文件基本都是以key-value格式,所以可以用文本编辑器,然后改名为 .yml或者.json文件即可。这里展示一下百度外卖app的配置文件 Baiduwaimai.yml部分内容:

    后退标记back
    android默认是back键,不需要设定.

    iOS上没有back键,需要自己指定,通过xpath定位方式指定遍历完所有控件应该点击什么控件返回

    黑名单black
    控件黑名单为black方法,他会绕过id name或者text中包含特定关键词的控件

    url黑名单可以绕过特定的activity

    遍历的行为控制
    整体的配置项应用顺序为:

    capability

    androidCapability和iosCapability分别用来存放不同的平台的设置,最后会和capability合并为一个

    startupActions
    用于启动时候自定义一些划屏或者刷新的动作

    selectedList
    适用于在一些列表页或者tab页中精确的控制点击顺序
    selectedList表示要遍历的元素特征
    firstList表示优先遍历元素特征
    lastList表示最后应该遍历的元素特征
    tagLimit定义特定类型的控件遍历的最大次数. 比如列表项只需要遍历少数
    需要注意的是firstList和lastList指定的元素必须包含在selectedList中

    元素定位的方法
    appcrawler大量的使用XPath来表示元素的范围,大部分的选项都可以通过XPath来指定范围,比如黑白名单,遍历顺序等

    1. 点击前后截图
      URIElementStore.scala负责记录控件是否被点击

    1.使用枚举类型,Clicked表示已遍历,Skiped = Value表示跳过

    2.使用elementStore(Map类型)存储被点击的组件列表。URIElement.scala用来代表唯一的控件,每个特定的命名控件只被点击一次, 所以这个element的构造决定了控件是否可被点击多次,如果组件url=baiduwaimai,key只有1个,所以只能点一次。如果组件url=baiduwaimai/xxxActivity,由于可能是不同Activity中的,所以可以点击多次

    截图加红框是如何实现的?

    appcrawler使用了java的ImageIO库, 可以对已有的图片进行标记, appcrawler在点击前会先识别元素的位置,并加上一个红框用于提示.。

    5.3 跨平台
    Android UI遍历
    1.启动appium

    appium --session-override

    2.启动appcrawler UI遍历
    java -jar appcrawler-2.1.1.jar -a bdwm.apk -o demo/ --capability appActivity=.view.WelcomeActivityAlias

    3.配置文件的运行方式

    java -jar appcrawler-2.1.1.jar -a bdwm.apk -c conf/baiduwaimai.yml

    4.跳过重新安装app

    java -jar appcrawler-2.1.1.jar -a bdwm.apk -c conf/baiduwaimai.yml --capability appPackage=waimai_4.11.6.apk

    IOS UI遍历
    模拟器运行:
    1.启动appium

    appium --session-override

    2.启动appcrawler 开始UI遍历

    java -jar appcrawler-2.1.1.jar -a bdwm.app -c conf/baiduwaimai.yml

    xcode编译出来的app地址可通过编译过程自己查看

    真机运行
    使用xcode编译源代码, 使用开发证书才能做自动化,编译出真机可自动化的.app或者.ipa包

    java -jar appcrawler-2.1.1.jar -a bdwm.ipa -c conf/baiduwaimai.yml

    5.4 自定义
    5.4.1 Xpath的充分利用
    获取控件XPath路径的工具
    uiautomatorviewer(最常用)、名字、平台

    Android:只能直接生成xpath, 需要自己拼凑

    iOS:inspector,只能工作在mac上,

    Android和iOS控件差异
    tag名字是不一样的.、控件布局不一样

    android.view.View

    android.widget.XXXXX

    关键的定位属性也不一样

    iOS:name、label、value

    Android:resource-id、content-desc、text

    常见xpath表达式用法

    5.4.2 插件化
    1.代理插件

    自动获取app上每次点击对应的网络请求,支持http和https

    安装
    目前是默认自带

    启用
    在配置文件中加入插件

    代理插件默认开启7771端口,配置你的Android或者iOS的设备的代理,指向你当前运行appcrawler的机器和7771端口

    结果
    在做每个点击的时候都会保存这期间发送的请求, 也就是记录前后两次点击中间的所有通过代理的请求,最后会在结果目录里面生成后缀名为har的文件

    https支持
    如果要录制https,需要安装一个特殊的证书"BrowserMob Proxy",或者用burp把当前端口设置为burp的上游代理,对于一些用url中包含有ip的https请求不支持

    1. Log插件

    作用
    自动记录Android的LogCat或者iOS的syslog

    安装
    目前是默认自带

    启用
    在配置文件中加入插件
    “pluginList” : [
    “com.testerhome.appcrawler.plugin.LogPlugin”
    ],

    结果
    记录一次点击事件后所发生的log记录, 并保存为后缀名为.log的文件中

    1. TagLimit插件

    作用
    智能判断列表和其他的相似布局元素,只遍历前3个相似空间. 适用于微博这种无限刷新的列表, 用于节省时间,原理是利用特定元素的tag布局层级是否完全一样

    安装
    目前是默认自带.

    启用
    在配置文件中加入插件

    “pluginList” : [
    “com.testerhome.appcrawler.plugin.TagLimitPlugin”
    ],

    结果

    六、appcrawler使用流程

    6.1 环境搭建

    1. appcrawler的最新jar包(最新的功能多,兼容性比较高),目前最新的是 appcrawler-2.1.2.jar ,

    2. appium环境安装

    3.Android SDK,主要是为了使用tools文件夹下的 uiautomatorviewer.bat 来定位元素,获取元素的xpath,

    6.2 appcrawler目录结构

    6.3 执行步骤

    1. 手机安装好最新的安装包,

    2.开启appium服务

    在命令行中输入: appium ,提示: 则开启成功

    3.在放 appcrawler-2.1.0.jar 的文件夹下执行以下命令:

    Java -jar appcrawler-2.1.0.jar -a bdwm.apk -c baiduwaimai.yml

    或者如上目录,运行start.py 脚本

    即可自动启动APP,并自动遍历点击元素

    因为遍历的深度比较大,在覆盖比较全面的条件下,基本要跑2个半小时左右,截图2600+张

    4.输出结果-日志和报告如下:

    1. html报告:

    七、目前的使用方向和收益

    在每个版本的集成测试阶段,会跑3次appcrawler UI 自动遍历,整体测试方式是手工测试+自动遍历

    现在我们只在android端进行UI自动遍历测试,运行2小时半左右,大约一小时截图1000张,通过截图+报告可以直观的看到哪些页面正常,哪些页面异常

    利用appcrawler发现bug2个:商超方向的一些空白页面

    八、工具问题分析

    虽然appcrawler对我们app的稳定性测试带了很客观的收益,但是这个工具本身还是有一些不足需要改善,主要不足如下:

    1. 测试速度可能比较慢,会对重复的界面进行点击

    2. 每个版本的配置文件或许有不同,对比三次测试,一方面是在相似的组件中可能漏掉比较重要的组件,另一方面是为了追求测试覆盖,重复点击了相似的界面组件。两者不能很好地平衡

    3. 配置文件有一定的局限性,有时不能很好地表达测试者的意图

    4. 不能自动输入文本信息

     

    ==================================================================

    AppCrawler自动化遍历使用详解(版本2.1.0 )

    【转自】https://blog.csdn.net/bbenskye/article/details/80265244

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击。

     

    优点:

    1.支持android和iOS, 支持真机和模拟器

    2.可通过配置来设定遍历的规则(比如设置黑名单和白名单,提高遍历的覆盖率)

    3. 其本身的遍历深度覆盖较全,比如它拥有APP的dom树,根据每个activity下的可点击元素逐个点击,比monkey更具有规律性,覆盖更全面

    4.生成的报告附带截图,可以精确看到点击了哪个元素及结果,对crash类的问题定位清晰

     

    缺点:

    1. 只能定位一页,对于翻页的无法进行下滑再点击,导致下面的内容无法遍历(需要自己设置下滑然后翻页)

    2.对于调用第三方应用的不太稳定,比如每次到上传头像处就停止遍历

    3.对于 整个layout区域是可点击,但是其中某个元素是不可点击的,没有进行遍历点击,比如:左上角的设置和右上角的私信都不能遍历到

    4.对于H5页面无法进行精确的定位点击,比如它的整个布局layout是 一个大模块,不能进行点击 (机会页,融资速递,新品优选)

     

    一.环境搭建:(前提是当然得有Java环境)

    1.appcrawler的最新jar包(最新的功能多,兼容性比较高),我用的是 appcrawler-2.1.0.jar ,

    下载地址如下:

    百度网盘: https://pan.baidu.com/s/1bpmR3eJ

    2. appium ,用来开启session服务并定位元素的,也可以使用 appium GUI(桌面版),但是我使用跑了一半就崩溃了,内存不足,所以推荐使用命令行版本的

    下载方式:

    (1)在命令行下执行npm --registry http://registry.cnpmjs.org install -g appium (推荐这种,npm的国内镜像)

    (2)检查appium所需的环境是否OK(这步很重要):进入Cmd命令行,输入appium-doctor 显示正常则成功

    3.Android SDK,主要是为了使用tools文件夹下的 uiautomatorviewer.bat 来定位元素,获取元素的xpath,用于准备工作前期。

     

    二.执行步骤:

    1.手机安装好最新的安装包,不需要登陆(避免不能遍历登陆前的页面内容,且登录后再进行遍历会出现activity不一致的报错,即和launchActivity不一致)

    2.开启appium服务

    在命令行中输入: appium ,提示: 则开启成功

    3.在放 appcrawler-2.1.0.jar 的文件夹下执行以下命令:

    Java -jar appcrawler-2.1.0.jar -a jingdata.apk -c config.yml --output wyy/

    即可自动启动APP,并自动遍历点击元素

    因为遍历的深度比较大,在覆盖比较全面的条件下,我这边测试会有496条case左右,基本要跑1个小时左右。

    最后自动生成的报告如下:

    技术分享

    三. 如何写配置文件 config.yml (这才是运行的核心所在)

    参数说明:

    Java -jar appcrawler-2.1.0.jar 用来启动appcrawler

     

    -a 后面跟安装包的名字 (用于自己手机没有安装包的时候的使用)

    -c 后面跟自定义的配置文件的路径和名字

    -output 后面跟输出的报告所在的文件夹,如果没有写,则会自动生成一个以时间为文件夹名字的报告文件

     

    其实这里的重点就是如何来写配置文件:

    配置文件基本都是以key-value格式,所以可以用文本编辑器,然后改名为 .yml或者.json文件即可。

    先上一下我的配置文件 config.yml:

    ---
    logLevel: "TRACE"
    reportTitle: "Jingdata"    #指生成的HTML(index.html)报告头部显示的标题信息
    saveScreen: true  
    screenshotTimeout: 20
    currentDriver: "android"
    showCancel: true
    tagLimitMax: 5
    tagLimit:
    - xpath: //*[../*[@selected=‘true‘]]
      count: 12
    maxTime: 10800
    resultDir: ""   #结果文件夹名,给定后,将不动态命名
    capability:
      newCommandTimeout: 120
      launchTimeout: 120000
      platformVersion: ""
      platformName: "Android"
      autoWebview: "false"
      autoLaunch: "true"
      noReset: "true"
      androidInstallTimeout: 180000
    androidCapability:
      deviceName: ""
      appPackage: "com.android36kr.investment"   
      appActivity: ""  #写不写无所谓,因为APP会自动判别当前的activity是否正确,是不是launchActivity,如果不是则会报错
      dontStopAppOnReset: true
      app: ""
      appium: "http://127.0.0.1:4723/wd/hub"
    # automationName: uiautomator2
      automationName: uiautomator2
      reuse: 3 
    headFirst: true
    enterWebView: true
    urlBlackList:
    - //*[contains(@resource-id, "tv_setting_logout") and @clickable=‘true‘]   #登出
    - //*[contains(@resource-id, "toolbar_close") and @clickable=‘true‘]   # 关闭按钮,否则会陷入死循环一直遍历同一个页面
    - //*[contains(@resource-id, "login_36kr_forgot_pass") and @clickable=‘true‘]  # 忘记密码,避免登陆时按照遍历顺序影响登陆
    - //*[contains(@resource-id, "mine_info_icon") and @clickable=‘true]  # 我的资料 头像部分设置不可点击(每次一运行到这里就结束了)
    - //*[contains(@resource-id, "tv_name") and @clickable=‘true]  #头部卡片 姓名
    - //*[contains(@resource-id, "tv_company_name") and @clickable=‘true]  # 头部卡片 公司和职位
    - //*[contains(@resource-id, "company_avatar") and @clickable=‘true]  # 头部 禁止进入我的资料页面
    - //*[contains(@resource-id, "chat_invest_card_rl") and @clickable=‘true] # 聊天页的项目头部,避免又进入详情页,跳出了循环
    - //*[contains(@resource-id, "chat_send_contact_ll") and @clickable=‘true]  #聊天详情页,交换名片,避免遍历线上包时与线上用户交互
    - //*[contains(@resource-id, "ll_header") and @clickable=‘true]  # 我的资料头像部分的整个头部区域,因为一点击头像后唤起照相就不运行了
    urlWhiteList:
    - //*[contains(@resource-id, "login_36kr_ll") and @clickable=‘true‘]   #必须遍历账号密码登录的按钮(以此方式才能登录成功)
    - //*[contains(@resource-id, "fl_msg") and @clickable=‘true‘]   #右上角的私信按钮
    - //*[contains(@resource-id, "iv_setting") and @clickable=‘true‘]  # 左上角的设置按钮
    backButton:
    - //*[contains(@resource-id, "toolbar_back") and @clickable=‘true‘]
    triggerActions:    # 主要解决登录的问题,当遇到登录输入框时,输入内容,比testcase更好用
    - action: "1771019****"
      xpath: "//*[@resource-id=‘com.android36kr.investment:id/login_36kr_phone_edit‘]"
      times: 1
    - action: "123456"
      xpath: "//*[@resource-id=‘com.android36kr.investment:id/login_36kr_pass_code‘]"
      times: 1
    - action: "click"
      xpath: "//*[@resource-id=‘com.android36kr.investment:id/login_36kr_go_btn‘]"
      times: 1 
    - action: "swipe("down")"
      xpath: "//*[@resource-id=‘com.android36kr.investment:id/share‘]"
      times: 1 
    startupActions: 
    - swipe("left")
    
    - println(driver)
    testcase:
      name: swipeTest
      steps:
      - when:
          xpath: //*[contains(@resource-id, ‘share‘)]
          action: driver.swipe(0.5,0.8,0.5,0.2)
        then: []

    还有一些其他的参数说明如下:

     

    1、java -jar appcrawler-2.1.0.jar --capability appPackage=xxxxxx,appActivity=xxxxxx
    2、appium --session-override:4:10,配置文件说明:11:00(看视频主要地方)
    3、配置文件使用:true和false是开启和关闭的意思
      logLevel:日志级别
      saveScreen:是否截图
      reportTitle:报告名字
      screenshotTimeout:屏幕超时时间
      currentDriver:当前设备(Android/iOS)
      resultDir:结果文件夹名,给定后,将不动态命名
      tagLimitMax:ios的元素tag控制
      tagLimit:给tag
      maxTime:最大运行时间
      showCancel:应该是控制是否展示注释
      capability:用于配置appium
      androidCapability:Android专属配置,最后会和capability合并
      iosCapability:iOS专属配置
      urlWhiteList/blackList:白名单/黑名单
      xpathAttributes:用来设定可以用那些种类型去定位控件
      defineUrl:用来确定url的元素定位xpath 他的text会被取出当作url因素(没理解)
      baseUrl:设置一个起始url和maxDepth, 用来在遍历时候指定初始状态和遍历深度
      maxDepth:默认的最大深度10, 结合baseUrl可很好的控制遍历的范围
      appWhiteList:app白名单,如果跳转到其他app,需要设定规则,是否允许停留在次app中
      headFirst:是否是前向遍历或者后向遍历
      enterWebView:是否遍历WebView控件
      urlBlackList:url黑名单.用于排除某些页面
      urlWhiteList:url白名单, 第一次进入了白名单的范围, 就始终在白名单中. 不然就算不在白名单中也得遍历.
                    上层是白名单, 当前不是白名单才需要返回
      defaultBackAction:默认的返回动作(没看到例子,貌似不特指的话,是click)
      backButton:给一些返回控件,用于返回动作使用
      firstList:优先遍历元素
      selectedList:默认遍历列表,如果不是指定的类型,而是确定控件,会分别点击控件
      lastList:最后遍历的元素
      blackList:排除某些控件
      triggerActions:制定规则(action、xpath、times)
      autoCrawl:自动抓取,看源码指定true后运行crawl(conf.maxDepth)命令
                 (crawl——清空堆栈 开始重新计数)应该是appcrawler的主要方法
      asserts:断言,用于是否失败的判断
      testcase:测试用例,看appcrawler日志,每次都是首先运行用例才会往下执行
      beforeElementAction:貌似没什么人用,字面意思在元素动作之前
      afterElementAction:与beforeElementAction的待遇差不多
      afterUrlFinished:也是很冷门的待遇
      monkeyEvents:monkey的点击数
      monkeyRunTimeSeconds:monkey运行时间
      given是条件 或输入  when是触发条件和动作 then是断言
    4、一次ctrl+c生成报告,两次ctrl+c是强行退出
    5、终端输入Scala进入Scala解释器,输入:q或:quit退出解释器
    6、遍历的深度应该怎么设置好,总是跳到其它页面,就回不到当前页面继续遍历了,看文档 通过黑白名单 
    7、设置一个起始url和maxDepth, 用来在遍历时候指定初始状态和遍历深度

    四. 遇到的问题有哪些?如何解决

    1.登录:

    因为APP的登录页面是用户名+验证码,由于该页面按钮众多且有验证图标,需要滑动解锁很复杂,所以选用了账号密码登录的方式

    (1)设置 账号密码登录 按钮为白名单,即必须点击,此时一定会编辑进入账户名密码登录页面,配置如下:

    urlWhiteList:

    - //*[contains(@resource-id, "login_36kr_ll") and @clickable=‘true‘]

    #必须遍历账号密码登录的按钮

    (2)设置账号密码登录中,用户名和密码元素的触发器,当定位到这两个元素时,输入用户名和密码,配置如下:

    triggerActions:

    # 主要解决登录的问题,当遇到登录输入框时,输入内容,比testcase更好用

    - action: "177*******"

    xpath: "//*[@resource-id=‘com.android36kr.investment:id/login_36kr_phone_edit‘]"

    times: 1

    - action: "123456"

    xpath: "//*[@resource-id=‘com.android36kr.investment:id/login_36kr_pass_code‘]"

    times: 1

    (3)设置账号密码登录中,输入用户名和密码后,按照遍历顺序,接下来有一个忘记密码的点击事件开启了新页面,为了避免登陆的多余操作,将 忘记密码 这个元素设置为黑名单,不进行遍历,配置如下:

    urlBlackList:

    - //*[contains(@resource-id, "login_36kr_forgot_pass") and @clickable=‘true‘]

    # 忘记密码,避免登陆时按照遍历顺序影响登陆

     

     

     

    ==================================================================

    AppCrawle的使用笔记

    【转自】https://blog.csdn.net/qq_42461553/article/details/83956988

     

    展开全文
  • 易语言内存教程非常多,但是很多已经不适合当前的游戏,当前已经新工具和思路原理,市面上大部分教程已经过时的了。我的课程都是最新的方法,综合各家所长的,让大家学有所成的。一分钱一分货,希望大家喜欢我的...

    易语言内存老教程非常多,但是很多已经不适合当前的游戏,当前已经新工具和思路原理,市面上大部分教程已经过时的了。我的课程都是最新的方法,综合各家所长的,让大家学有所成的。一分钱一分货,希望大家喜欢我的课程。课程在于精,不在于多。课程在于方法,不在于答案。可以实现举一反三。

    易语言内存教程部分(每节课30-50分钟,质量保证)
    第一章:内存汇编基础

    1. 易语言内存辅助解疑—明确学习方向,少走弯路
    2. 内存辅助基础知识
    3. 寄存器和常用汇编指令
    4. 栈内存空间和汇编函数
    5. ce常用功能介绍和数据查找
    6. od工具使用 和 3D寻路call查找
    7. 内存读写基地址和偏移实例
    8. 远线程注入走路call代码编写

    第二章:大型网游数据分析(2020年新的工具新的方法)
    1. 某网游人物数据分析
    2. 代码遍历人物信息
    2. 怪物数组遍历分析
    7. ce配合od逆向网游角色数据
    8. 网游3DX仙游戏人物数据分析
    9. CE 指针搜索 快速获取数据-----ce7.0新方法扫基地址和偏移
    10. ce结构分析功能—ce7.0新结构工具分析
    11.  逆向分析字符信息来源—人物名字
    12.  选中怪物信息和选怪call
    13. 远程注入选怪call
    14.  选怪call注入源码编写(远程注入)
    11. 大漠插件写选中call
    12. 怪物遍历数据逆向
    13. 怪物属性分析上1
    13. 怪物属性分析下2
    14. 读写支持库 编写遍历怪物
    15. 大漠插件 编写遍历怪物(数组)
    16. 二叉树遍历怪物数据代码编写
    17. 二叉树原理和怪物玩家数据
    15. 链表结构分析
    19. 发包原理和功能call查找
    20. 找call技巧1
    21. 找call技巧2
    22. 找call技巧3
    16. 传统发包函数和线程发包游戏call分析

    第三章:内存自动化脚本(全内存网游实例)
    1.  打怪call分析和封装
    17. 计算人物和怪物距离(勾股定理)
    3.  自动打怪流程和代码编写
    4.  背包物品数据分析
    5.  遍历背包物品信息代码编写
    6.  发包函数找使用物品call
    18. 使用物品call代码编写和封装
    19.   内存自动补血脚本
    20.   喊话call查找和来源分析
    21. 商人自动广告喊话脚本
    11. 某玩网游地面物品数据结构
    12. 地面物品属性分析
    13. 批量自动捡起物品脚本编写
    14. 内存脚本更新之特征码定位基地址
    22. 内存脚本更新之call外层定位脚本
    23. 内存脚本更新之call内部定位脚本
    24. 内存脚本更新之偏移定位脚本脚本

    第四章:PC内存注入通讯多开框架(工作室级)
    1. dll文件编写和注入(已经更新)
    25. 中控服务端注入dll代码编写(已经更新)
    26. 游戏窗口和dll窗口排序(已经更新)
    27. 远控服务器和客户端通讯介绍(已经更新)
    5. 心跳包之发送客户角色信息(已经更新)
    6. 服务器发送执行call指令(已经更新)
    7. 客户端dll注入的一些注意问题(已经更新)
    8. 通讯dll获取怪物信息和打怪思路(免dll注入调试)
    9. 客户端dll界面热键监视
    10. 中控台服务端通信界面设计
    11. 通讯中控样品测试

    第五章:特殊类功能
    28. hook拦截技术-拦截数据(更新中)
    29. hook拦截技术-API拦截(更新中)
    3、 HOOK函数实例操作(更新中)
    30. 防止检测技术1
    31. 防止检测技术2

    易语言基础和中控基础部分(附加给0基础学员) 赠送500块的基础课程

    第1章:认识易语言和中控界面设计
    1.1.整体认识易语言
    1.2.易语言基础知识和误点
    1.3.函数与代码执行流程语句
    1.4.中控界面设计1
    1.5.中控界面设计2
    1.6.界面文件读写配置
    1.7.中控任务列表项配置

    第2章:雷电模拟器命令和操控
    2.1雷电模块使用
    2.2.自动启动和APK配置
    2.3窗口排序
    2.4雷电命令简易多线程刷抖音
    2.5线程操控

    第3章:大漠基础命令和多线程基础
    3.1多线程坑之 一变量访问冲突
    3.2多线程坑之 二数组操作奔溃问题
    3.3多线程坑之 三组件(控件)坑
    3.4大漠常用命令1-图色
    3.5大漠常用命令2-ocr
    3.6大漠常用命令3-后台和窗口命令
    3.7大漠多线程主体框架**

    详细关注类人猿易语言内存汇编教程

    展开全文
  • FBMemoryProfiler类库使用教程:http://ifujun.com/fbmemoryprofiler-shi-yong-ji-chu-jiao-cheng/ 手机设备的内存是一个共享资源。应用程序可能会不当的耗尽内存、崩溃,或者遭遇大幅度的性能降低。 Facebook ...

    分装库下载:https://github.com/facebook/FBMemoryProfiler

    FBMemoryProfiler类库使用教程:http://ifujun.com/fbmemoryprofiler-shi-yong-ji-chu-jiao-cheng/

    手机设备的内存是一个共享资源。应用程序可能会不当的耗尽内存、崩溃,或者遭遇大幅度的性能降低。

    Facebook iOS客户端有很多功能,并且它们共享同一块内存空间。如果任何特定的功能消耗过多的内存,就会影响到整个应用程序。这是可能发生的,比如,这个功能导致了内存泄露。

    当我们分配了一块内存,并设置了对象之后,如果在使用完了之后忘记释放,这就会发生内存泄露。这意味着系统是无法回收内存并交予他人使用,这也最终意味着我们的内存将会逐渐耗尽。

    在Facebook,我们有很多工程师在代码库的不同部分上工作。这不可避免的会发生内存泄露。当发生内存泄露之后,我们需要尽快找到并修复它们。

    一些工具已经可以找到内存泄露,但是它们需要大量的人工干预:

    • 打开Xcode,给性能分析(profiling)编译。

    • 载入Instruments。

    • 使用应用程序,尝试尽可能多的重现场景和行为。

    • 查看内存和泄露。

    • 追踪内存泄露的根源。

    • 修复这个问题。

    这意味着每次都需要重复大量的手动操作。为此,在我们的开发周期上,我们可能无法尽可能早的定位和修复内存泄露问题。

    自动化可以在不需要更多开发者的情况下,更快的找到内存泄露。为了解决这个问题,我们做了一套工具来自动化的处理和修复我们代码库中的一些问题。今天,我们很兴奋的发布这些工具:FBRetainCycleDetector、FBAllocationTracker、FBMemoryProfiler。

    循环引用(Retain cycles)

    Objective-C 使用引用计数去管理内存和释放不使用的对象。内存中的任何一个对象都可以持有(retain)其他的对象,只要前面的对象需要它,对象就会一直保持在内存中。查看这个的一个方法是这个对象持有其他的对象。

    在大部分时间内,这都工作的很好,但当两个对象互相持有的时候,这就会陷入一个僵局。直接,或者更常见的,通过间接对象连接它们。这种持有引用的环我们叫做循环引用(Retain cycles)。

    blogimage_memoryleak_1.jpg

    循环引用会导致一些列的问题。最好的情况下,对象只会在内存中占有一点点位置。如果这个被泄露的对象正积极地做个一些不平凡的事情,应用程序的其他部分就只会有更少的内存。最坏的情况下,如果泄露导致使用超出可用内存的容量,那么,应用程序会崩溃。

    在手动性能分析期间,我们发现,我们往往有一些循环引用。我们很容易引起内存泄露,但是很难找到它们。循环引用检测器可以很容易的找到它们。

    在运行时检测循环引用

    在 Objective-C 中找循环引用类似于在一个有向无环图(directed acyclic graph)中找环, 而节点就是对象,边就是对象之间的引用(如果对象A持有对象B,那么,A到B之间就存在着引用)。我们的 Objective-C 对象已经在我们的图中,我们要做的就是用深度优先搜索遍历它。

    这有点抽象,但效果很好。我们必须确保我们可以像节点一样使用对象,对于每个对象,我们都可以获取到它引用的所有对象。这些引用可能是weak,也可能是strong。只有强引用才会导致循环引用。对于每个对象来说,我们需要知道如何找出这些引用。

    幸运的是,Objective-C提供了一个强有力的、内省的运行时库。这让我们在图中可以有足够的数据去挖掘。

    图中的节点可以是对象,也可以是Block。让我们来分别讨论一下。

    对象

    运行时有很多工具允许我们对对象进行内省。

    我们要做的第一件事是获取对象的实例变量的布局(ivar layout)。

    1
    2
    const char *class_getIvarLayout(Class cls);
    const char *class_getWeakIvarLayout(Class cls);

    对于对象,实例变量的布局描述了我们在哪儿可以找到其他对象的引用。它会提供给我们一个索引(index),这代表我们需要在对象地址上添加一个偏移量(offset),就可以得到它所引用的对象的地址。运行时也允许我们获取“弱引用实例变量布局(weak ivar layout)”。

    这也部分支持Objective-C++。在Objective-C++中,我们可以在结构体中定义对象,但是这不会在实例变量布局中获取到。运行时提供了“类型编码(type encoding)”来处理这个问题。对于每一个实例变量来说,类型编码描述了变量是如何结构化的。如果这是一个结构体,它会描述它包含了哪些字段和类型。我们计算出它们的偏移量,在图中,找出它们所指向的对象。

    也有一些边缘条件我们不会深入。大部分是一些不同的集合,我们不得不列举它们去获得它们持有的对象,这可能会导致一些副作用。

    Block

    Block和对象有一点不一样。运行时不会让我们很轻易的看到它们的布局,但是我们仍然可以猜测。

    在处理Block的时候,我们可以使用 Mike Ash 在他的项目Circle(第一时间启发FBRetainCycleDetector的项目)中提出的想法。

    我们可以使用的是ABI(application binary interface for blocks - 应用程序二进制Block接口)。它描述了Block在内存中的样子。如果我们知道我们在处理的引用是一个Block,我们可以把它丢在一个假的结构体中来模仿Block。在放到一个C语言的结构体之后,我们可以知道Block所持有的对象。不幸的是,我们不知道这些引用是强引用还是弱引用。

    为了解决这个问题,我们使用了一个黑盒技术。我们创建一个对象来假扮我们想要调查的Block。因为我们知道Block的接口,我们知道在哪可以找到Block持有的引用。我们伪造的对象将会拥有“释放检测(release detectors)”来代替这些引用。释放检测器是一些很小的对象,它们会观察发送给它们的释放消息。当持有者想要放弃它的持有的时候,这些消息会发送给强引用对象。当我们释放我们伪造的对象的时候,我们可以检测哪些检测器接收到了这些消息。只要知道哪些索引在伪造的对象的检测器中,我们就可以找到原来Block中实际持有的对象。

    blogimage_memoryleak_2.jpg

    自动化

    让这工具真正闪光的是,在工程师内部构建的时候,它会连续的、自动的运行。

    客户端部分自动化是简单的。我们在定时器上运行循环引用检测器,定期扫描内存去寻找循环引用,虽然这不是完全没有问题。当我们第一次运行分析器的时候,我们意识到它不足以很快的扫描整个内存空间。当它开始检测的时候,我们需要给它提供一组候选对象。

    为了更有效的解决这个问题,我们开发了FBAllocationTracker。这个工具会主动跟踪NSObject子类的创建和释放。它可以以一个很小的性能开销来获取任何类的任何实例。

    对于客户端的自动化,只要在NSTimer上使用FBRetainCycleDetector,再用FBAllocationTracker来抓取实例来配合跟踪就行。

    现在,让我们来仔细看看后台会发生什么。

    循环引用可以包含任何数量的对象。一个坏的连接会导致很多环的时候,这就复杂了。

    blogimage_memoryleak_3.jpg

    在环中,A→B是一个坏连接,创建了两个环:A-B-C-D 和 A-B-C-E。

    这有两个问题:

    • 我们不想给一个坏连接导致的两个循环引用分别标记。

    • 我们不想给可能代表两个问题的两个循环引用一起标记,即使它们共享一个连接。

    所以我们需要给循环引用定义簇组(clusters),鉴于这些启发,我们写了个算法来找到这些问题。

    • 在给定的时间收集所有的环。

    • 对于每一个环,提取Facebook特定的类名。

    • 对于每一个环,找到包含在环内的被报告的最小的环。

    • 依据上面的最小环,将环添加到组中。

    • 只报告最小环。

    最后一部分是找出谁第一时间偶然引入了循环引用。我们可以通过环中的”git/hg责任”的部分代码来猜测最近的变化所导致的问题。最后一个接触这个代码的人将会收到修复代码的任务。

    整个系统如下:

    blogimage_memoryleak_4.jpg

    手动性能分析

    虽然自动化有助于简化发现循环引用的过程,降低人员的消耗,手动性能分析依然有它的用武之地。我们创建的另一个工具允许任何人查看内存使用,甚至不需要把他的手机插到电脑上。

    FBMemoryProfiler可以很容易的添加到任何应用程序,可以让你手动配置构建文件,可以让你在应用程序内运行循环应用检测。它会借用FBAllocationTracker和FBRetainCycleDetector来实现此功能。

    生成(Generations)

    FBMemoryProfiler的一个很伟大的特性是“生成追踪(generation tracking)”,类似于苹果的Instruments的生成追踪。生成只是简单的在两次标记之间拍摄所有仍然活着的对象的快照。

    使用FBMemoryProfiler的界面,我们可以标记生成,例如,分配三个对象。然后我们标记另一个生成,之后继续分配对象。第一个生成包含我们一开始的三个对象。如果任意一个对象被释放了,它会从我们第二个生成中移除。

    blogimage_memoryleak_5.jpg

    当我们有一个重复的任务,我们认为可能会内存泄露的时候,生成追踪是很有用的,例如,导航View Controller的进出。在每次开始我们的任务的时候,我们标记一个生成,然后,对之后的每个生成进行调查。如果一个对象不应该活这么长时间,我们可以在FBMemoryProfiler界面清楚地看到。

    Check Out

    无论你的应用程序是大是小,功能是多是少,好的工程师都应有好的内存管理。在这些工具的帮助之下,我们可以更简单的找到并修复这些内存泄露,所以我们可以花费更少的时间去手动处理,这样就可以有更多的时间去编写更好的代码。我们也希望你可以发现它们是有用的。在Github上check out下来吧。FBRetainCycleDetector, FBAllocationTracker 和 FBMemoryProfiler。


    展开全文
  • flex教程:内存使用机巧

    千次阅读 2010-09-27 05:19:00
    <br /> 本次flex教程说的是内存使用的一些相关的问题:内存问题向来是程序员十分关注的一个方面,也是体现程序健壮性与否.对于C/C++等类C语言来说,编程人员要对程序使用内存进行比较谨慎的处理,否则很容易...
  • 6:大漠综合工具、绑定测试工具、类库生成工具使用详解 7:简单的循环换号控制台的建立 8:利用大漠函数实现简单的主线、副本功能 第二章 大漠多线程框架及模拟器手游脚本实战 共16课时 1:手游脚本多线程、多...
  • 内存实现功能:大家都知道安卓实现找坐标要识别数据,要制作字库找图找色,可能要很多尝试调试,还要加各种算法等一些麻烦的东西,如果用内存反而简单的,可能你在几分钟之内就能够把坐标、地图名字、...
  • Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到...
  • DOS 中for遍历文件内容

    千次阅读 2019-02-20 14:14:56
    DOS 中for遍历文件内容
  • 资源打包工具使用及资源的异步加载处理   TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包。 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 节省图片资源...
  • nodejs 遍历文件夹文件统计文件大小
  • 课程内容:1....控件焦点对象3....使用VS2019编写汇编代码测试调用5....遍历所有控件对象跟控件名称7.使用指针技术,通过控件名取...课程准备:课程用到VS2019、MFC、DLL等工具开发与测试,使用C++编写代码,含少量汇编代码。
  • 内存管理教程和原理剖析 前言 初学 objectice-C 的朋友都有一个困惑,总觉得对 objective-C 的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对 objective-C 内存管理机制...
  • 全文检索工具Lucene入门教程

    千次阅读 多人点赞 2020-07-11 17:55:11
    Apache Lucene是完全用Java编写的高性能,功能齐全的,全文检索引擎工具包,通过lucene可以让程序员快速开发一个全文检索功能。 1.1什么是全文检索 在我们的生活中数据总体分为两种:结构化数据 和非结构化数据 。...
  • Redis使用教程

    千次阅读 2018-10-28 08:58:50
    删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素,如果count小于0,从尾到头遍历删除,如果count等于0,则删除链表中所有等于value的元素。 linsert key before|after...
  • lucene 使用教程

    2013-11-06 11:40:45
    Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 1.2 lucene能做什么  要回答这个问题,先要了解lucene的本质。实际上lucene的功能很单一,说到底,就是你给它若干个字符
  • CE修改器使用教程 [入门篇]

    千次阅读 多人点赞 2019-05-01 15:25:00
    Cheat Engine 一般简称CE,是一个开放源代码的作弊软件,其功能包括:内存扫描、十六进制编辑器、...本章节内容将带领小白学会使用CE,由于是入门教程所以不会讲解一些太深奥的原理,其目的是教会你如何使用这款工具...
  • CE修改器使用教程 [基础篇]

    万次阅读 多人点赞 2018-05-30 13:21:00
    Cheat Engine 一般简称CE,是一个开放源代码的作弊软件,其功能包括:内存扫描、十六进制编辑器、调试工具,Cheat Engine 自身附带了外挂制作工具,可以用它直接生成外挂工具,CE可以说是目前最优秀的游戏修改器不是之...
  • 转载:... ... 很想看到这样好的内存管理的文章,可是一直都是没有找到,好多都是复制来复制去,真心的烦人,今天看到一个很好的解析内存管理的文章,就拿来大家
  • CodeWarrior 使用教程

    万次阅读 2009-09-25 16:35:00
    CodeWarrior 使用教程第一课认识 CodeWarrior Translated from CodeWarriorU.COMCodeWarrior 能做些什么? 当你知道自己能写更好的程序时,你一定不会再使用别人开发的应用程序。但是常常会发生这种情况,就是当你写...
  • 我在这里总结了自己对objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有所帮助,也欢迎大家一起探讨。   此文涉及的内存管理是针对于继承于NSObject的Class。 一 基本...
  • iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理 Posted on 2010-03-08 00:30 Vince Yuan 阅读(6987) 评论(17) 编辑 收藏  版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)...
  • 【Unity教程】Unity中的C#内存管理

    千次阅读 2015-09-15 22:28:01
    本系列文章主要讲解C#...• 第二篇文章着重于使用工具发现内存泄漏。Unity Profiler在此方面是一个强大的工具,但它代价太高(unity5中免费)。因此我将讨论.NET反汇编和通用中间语言(CIL),以此展示如何使用免费
  • EasyPOI 使用教程

    千次阅读 2020-08-28 15:43:11
    1.3 使用 1.4 测试项目 1.5 可能存在的小坑 2. Excel 注解版 2.1 Excel导入导出 2.2 注解 2.3 注解导出,导入 2.3.1 对象定义 2.3.2 集合定义 2.3.3 图片的导出 2.3.4 Excel导入介绍 2.3.5 Excel导入小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,585
精华内容 5,834
关键字:

内存遍历工具使用教程