(转自:http://blog.sina.com.cn/s/blog_4431c7610100x15t.html)

class dump是一个命令行工具,用来监测存储在Mach-O二进制文件理的Objective-C运行时信息。它为类(class),分类(category)和协议(protocol)生成声明信息。这些信息与 otool -ov 命令提供的信息是一样的,但表示得更像正常的Objective-C的声明,所以它更紧凑,更易读

为什么要使用class-dump

对于好奇的人,是一个好工具。你可以看到闭源应用程序,框架(framework)和软件包(bundle)的设计。

http://www.codethecode.com/download/class-dump-3.3.3.dmg  (2010-08-08)

http://www.codethecode.com/download/class-dump-3.3.3.tar.bz2

http://bitbucket.org/nygard/class-dump

用法

class-dump [options]

选项可以是

-a   显示实例变量偏移

-A   显示实现地址

–arch <arch> 选择一个指定的架构,如ppc, ppc7400, ppc64, i386, x86_64

-C <regex>  只显示同正则表达式匹配的类

-f <str>    在方法名中查找字符串

-H  在当前目录生成头文件,或者在用-o选项指定的目录生成

-I    对类,目录,协议 按照继承关系(inheritance)进行排序(覆盖-s选项)

-o <dir>  为-H选项指定输出目录

-r  递归扩展framework,并修复VM共享库

-s  按名称对classes和categories进行排序

-S  按名称对方法(method)进行排序

–list-arches  类出文件中的arches,然后退出

–sdk-root  指定 SDK root 路径(完全路径,或者 4.1 ,  4.0,  3.2,  10.6 , 10.5, 3.1.3, 3.1.2)

class-dump-x是一个class-dump的修改版,在当时(2008年) class-dump 3.1.2不支持Objective-C 2.0 ABI). Objective-C 2.0 ABI删除了OBJC段,在data段引入了一些新的section. 并且 class/obj的布局也边了。

它不生成@property声明,因为所有的properties被映射到方法了。 不创建@property 元素,这样的源码可以与objc 1.0的编译器兼容

http://iphone.freecoder.org/class-dump-3.1.2-x-1.0.1.tar.bz2 (修改版本)

http://iphone.freecoder.org/class-dump-x (Leopard上运行的二进制)

http://iphone.freecoder.org/class-dump-x-iphone  (iPhone运行的二进制)

class_dump_z 是对上面两个的改进

为什么需要另外一个class-dump

因为class-dump-x对ivar offsets的计算也是错误的,并不支持properties

原版的class-dump虽然也支持ABI2 了,但对ivar 的计算依然是错误的

class-dump-z 主要针对 iPhone 程序进行dump, 不支持以下特性

64位(除非以后iPhone上的内存超过4G了)

Objective-C 1.0 ABI(iPhone用2.0)

class-dump-z完全用C++重写,避免动态调用,不像class-dump和class-dump-x那样使用Objective-c写。删除不必要的调用,使得class-dump-z比它的前任们快10倍左右。并且可以在Linux,Mac, iPhone上运行

选项

-p  转换未声明的getters和setters为properties

-h proto  隐藏那些已经出现在 协议中的方法

-h super  隐藏继承来的方法

-y <root>  选择sysroot, 默认是最后一版的iPhoneOS SDK 或者 /

-u <arch> 选择指定的架构( armv6, armv7等)

-a   打印ivar 偏移

-A  打印 实现的VM地址

-k  显示额外的注释

-k -k 显示更多注释

-R  显示指针声明 , int *a 而不是 int* a(因为前者更明显地表达了指针的语义)

-N  保持原始结构名 (不用 CFArrayRef代替 __CFArray)

-b   在 +/- 号之后放一个空格,  也就是 + (void) ,而不是 +(void)

-i  <file> 读取并更新签名提示文件

-C  <regex>  只显示匹配的types

-f  <regex> 只显示匹配的methods

-g    只显示导出classes

-X <list>  忽略所有types(除了categories)

-h cats  隐藏categories

-h dogs 隐藏协议(这哥们太幽默了,上面是cats(分类),这里就是dogs了

-S    将types按字幕顺序排序

-s     将方法按字母顺序排序

-z     按照字母顺序对方法排序,但将class方法和 -init 放在最见面

-H    分离头文件

-o <dir> 将头文件放到这个目录,而不是当前目录

【转】Objective-C Class Dump的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. PMON failed to acquire latch, see PMON dump

    前几天,一台Oracle数据库(Oracle Database 10g Release 10.2.0.4.0 - 64bit Production)监控出现"PMON failed to a ...

  3. oracle dump数据库

    最近正在看老白的<DBA的思想天空>,了解数据块结构,想通过dump data block验证oracle对于行尾的NULL,是不占用存储空间的. 我们先来看一下怎样dump数据块: 1. ...

  4. Dump类型说明

    通过使用windbg提供DbgHelp库中的MiniDumpWriteDump函数在程序崩溃时写dump文件记录程序当时状态,为后续分析问题提供现场. 该函数提供了DumpType参数,让程序员根据具 ...

  5. 使用GDB 追踪依赖poco的so程序,core dump文件分析.

    前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...

  6. 转:CentOS, 找不到dump命令:command not found

    dump 功能说明:备份文件系统.语 法:dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f &l ...

  7. slave IO流程之二:注册slave请求和dump请求

    slave IO流程已经在http://www.cnblogs.com/onlyac/p/5815566.html中有介绍 这次我们要探索注册slave请求和dump请求的报文格式和主要流程. 一.注 ...

  8. 使用MAT(Memory Analyzer Tool)工具分析dump文件--转

    原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...

  9. 认识Java Core和Heap Dump

    什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...

  10. sublime text 乱码生成.dump问题的解决方法

    title: sublime text 乱码生成.dump问题的解决方法 tags: sublime text,sublime text 3,.dump,乱码 grammar_cjkRuby: tru ...

随机推荐

  1. iOS 汉字转拼音

    - (NSString *)getFirstString:(ICCustom *)custom {     NSMutableString *source = [custom.merchantAbbr ...

  2. [Leetcode][JAVA] Triangled

    Triangle Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ...

  3. IIS Connection Timeout vs httpRuntime executionTimeout

    IIS Connection Timeout specifies how long, in seconds, should the code wait before timing out from t ...

  4. php笔试题(1)--转载

    一份不错的php面试题,附答案,有准备换工作的同学可以参考一下.一.基础题1. 写出如下程序的输出结果 <?php     $str1 = null;     $str2 = false;    ...

  5. 知识总结提炼-AP模块

    http://www.cnblogs.com/bruce_zhao/p/3809686.html 应付模块业务操作流程 供应商管理 供应商概述 在您使用 Oracle Purchasing 之前,需要 ...

  6. MD5的使用

    /******************************************************************************* * keyBean 类实现了RSA D ...

  7. GET和POST有什么区别?

    前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继续追问有没有别的区别?我说这就是个名字而已,如果服务器支持,他完全可以 ...

  8. Linux Kernel 3.11 正式版发布

    Linus 发布 了 3.11 版本的 Linux 内核.该版本值得关注的新特性有: Lustre 分布式文件系统.透明的 ARM 架构的大数据页支持:ARM64 上的 Xen 和 KVM 虚拟化:O ...

  9. 用c#开发微信 (16) 微活动 2 刮刮卡

    微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...

  10. Windows7上搭建Cocos2d-x 3.1.1开发环境

    前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握Cocos2d-x 3.0.首先就从开发环境的大家说起吧. 开发工具 ...