(转自: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. 4.“写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。

    ACM的题库的编程都只能算做程序,不能算软件.写程序和做软件区别还是很大的.程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指令.而软件是程 ...

  2. 业务代码中(java class)中如何实现多线程,并且将子线程中的值随方法返回返回值

    转载自http://bbs.csdn.net/topics/390731832 问题: public static String getAddress(final InputStream inputS ...

  3. html + css (1)

    a{ text-decoration:none; /* 规定添加到文本的修饰;下划线没有了 */ margin:0px; font-size:15px; display: block; /* 以块级元 ...

  4. linux ntp 服务器和用户端

    ntp 服务器 1.输入 rpm -qa|grep ntp 查看是否安装了ntp服务器 2.如果没安装 yum -y install ntp 安装 3.修改 /etc/ntp.conf 将原serve ...

  5. JAVA的String的传值和传地址问题

    关于Java的String类型,可能你会碰到这种情况,将String类型的变量传到一个函数,在这个函数中修改变量的值,但是,实参的值并没有发生改变. Java中String的传值/传地址问题: 例子引 ...

  6. Magicodes.WeiChat——ASP.NET Scaffolding生成增删改查、分页、搜索、删除确认、批量操作、批量删除等业务代码

    关于T4代码生成这块,我之前写过几篇帖子,如:<Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)>(http://www.cnblogs.co ...

  7. thinkphp支持大小写url地址访问,不产生下划线

    from:http://www.111cn.net/phper/thinkPhp/57748.htm 一.在配置文件中开启了thinkphp的大小写识别功能,使链接大小写都可以正常访问: ‘URL_C ...

  8. Gradle的属性设置大全

    Gradle作为一款项目构建工具,由于其强大.灵活.快速.完全兼容Ant等特性,越来越受到人们欢迎.Gradle的灵活有时候也会引起人们的困惑.比如在Gradle中设置变量和属性就有N种办法.由于Gr ...

  9. C++ Primer 变量和基本类型

    <C++ Primer 4th>读书摘要 基本上所有的语言都要提供下列特征: • 内置数据类型,如整型.字符型等. • 表达式和语句:表达式和语句用于操纵上述类型的值. • 变量:程序员可 ...

  10. paip 自定义输入法多多输入法词库的备份导出以及导入

    paip 自定义输入法词库的备份导出以及导入 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/ ...