(转自: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. 基于注解的DWR使用

    dwr3.0支持使用注解,如果不喜欢配置dwr.xml文件,注解是个不错的方法,简单快捷. 步骤如下: 1.配置web.xml文件,需要在DwrServlet里加classes初始化参数: <i ...

  2. IPD模式下开展敏捷开发的一些问题汇总

    1.      我们现在普遍用的是老系统情况下,什么时候把软件和硬件在敏捷项目里面集成? 答:有两种场景:第一种场景是把软件分几个迭代,最后把软件和硬件一起集成:第二种场景是更好的一种场景,每几个迭代 ...

  3. HTML锁定Table中某一列

    1. 2. 3. function ChangeTable() { var type = document.getElementById("ddl_ReportType").val ...

  4. vimium: 浏览器神器

    chrome firefox 都有 vimium (firefox 中为vimfx), 快捷键也差不多 下边是chrome中快捷键示意图: G = shift + g (其他同理) c+e = ctr ...

  5. redis和ssdb读取性能对比

    最近关注了一下ssdb,它的特点是基于文件存储系统所以它支撑量大的数据而不因为内存的限制受取约束.从官网的测试报告来看其性能也非常出色和redis相当,因此可以使用它来代替redis来进行k-v数据业 ...

  6. 控制反转(Inversion of Control)之我的理解

    关于控制反转(Inversion of Control),在具体实现上也有许多其它的叫法,如依赖倒置(Dependency Inversion Principles, DIP).依赖注入(Depend ...

  7. [DNX]解决dnu restore时找不到Newtonsoft.Json的问题

    在Mac上用最新版的dnx 1.0.0-beta5-11855进行dnu restore,出现下面的错误: System.IO.FileNotFoundException: Could not loa ...

  8. LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对

    回到目录 这个文章写的有点滞后了,呵呵,因为总想把之前不确定的东西确定了之后,再写这篇,之前的LINQ-to-SQL那点事,请点这里. LINQ-to-SQL中的数据缓存与应对 Linq-to-SQL ...

  9. duilib进阶教程 -- 扩展duilib的消息 (11)

    duilib并没有提供双击和右键消息,所以需要我们自行扩展,这里以添加双击消息为例, 在UIDefine.h里,我们只看到了DUI_MSGTYPE_CLICK消息,却没有看到双击消息,因此需要在这里添 ...

  10. paip.前端加载时间分析之道优化最佳实践

    paip.前端加载时间分析之道优化最佳实践 1.另存为 ,查看文件尺寸..和图片. 2.view the 另存为的htm静态的文件单个的加载,看时间...可以排除编程语言的问题and 数据库.. ## ...