IOS学习 dwarfdump的

-[__NSArrayM allKeys]: unrecognized selector sent to instance 0x14fc6200
(null)
(
0   CoreFoundation                      0x2e415f23  + 154
1   libobjc.A.dylib                     0x38ba8ce7 objc_exception_throw + 38
2   CoreFoundation                      0x2e419837  + 202
3   CoreFoundation                      0x2e418137  + 706
4   CoreFoundation                      0x2e367098 _CF_forwarding_prep_0 + 24
5   XXXX                              0x2460c9 XXXX + 2367689
6   XXXX                              0x12d0ad XXXX + 1216685
7   XXXX                              0x12dc5d XXXX + 1219677
8   Foundation                          0x2edfea0f  + 1062
9   libsystem_pthread.dylib             0x391c4959  + 140
10  libsystem_pthread.dylib             0x391c48cb _pthread_start + 102
11  libsystem_pthread.dylib             0x391c2ae8 thread_start + 8
)
dSYM UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CPU Type: armv7
Slide Address: 0x00024001
Binary Image: XXXX
Base Address: 0x000d1f0a


1.首先要确定下在/usr/bin下是否有dwarfdump,没有的话用不了了dwarfdump命令。

(XXXXX.app.dSYM文件的路径:/Users/username(电脑名)/Library/Developer/Xcode/Archives/这个文件夹)

2.确定有之后dwarfdump --uuid 路径(路径/XXXXX.app.dSYM),获得XXXXX.app.dSYM的id(这里渠道不同,XXXXX.app.dSYM也不是一个,比如9.1助手和appStore的不同)

3.得到id之后dwarfdump --lookup 0x2460c9 路径(路径/XXXXX.app.dSYM)。这个是在XXXXX.app.dSYM中找到对应代码的堆栈和详细信息。

(这里也可以加上限制条件--arch=armv7,不加会把所有arm64、armv7等全打印出来)

我们要获取的就是详细信息,帮助我们查找已经发生,不易再现的BUG。


输出结果如下:

----------------------------------------------------------------------
 File: /Users/apollo/Desktop/XXXXXX/XXXXXXX/dSYMs_91/XXXX.app.dSYM/Contents/Resources/DWARF/XXXX (armv7)
----------------------------------------------------------------------
Looking up address: 0x00000000000caaeb in .debug_info... found!


0x0025efec: Compile Unit: length = 0x00009c97  version = 0x0002  abbr_offset = 0x00000000  addr_size = 0x04  (next CU at 0x00268c87)


0x0025eff7: TAG_compile_unit [1] *
             AT_producer( "Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn)" )
             AT_language( DW_LANG_ObjC )
             AT_name( "文件路径,最后是文件名test.m" )
             AT_low_pc( 0x000c9048 )
             AT_stmt_list( 0x0006fe9f )
             AT_comp_dir( "不清楚定义是什么的目录(IOS/Project/XXXX(XXXX的类型是文件类型))" )
             AT_APPLE_optimized( 0x01 )
             AT_APPLE_major_runtime_vers( 0x02 )


0x0025f8ee:     TAG_subprogram [43] *
                 AT_name( "-[TestClass testFunction]" )//testFunction中出了问题
                 AT_decl_file( ""文件路径,最后是文件名test.m" )
                 AT_decl_line( 422 )//行数
                 AT_prototyped( 0x01 )
                 AT_type( {0x0025f9eb} ( NSString* ) )
                 AT_APPLE_isa( 0x01 )
                 AT_low_pc( 0x000caa60 )
                 AT_high_pc( 0x000cadca )
                 AT_frame_base( r7 )
                 AT_object_pointer( {0x0025f90a} )


0x0025f92c:         TAG_lexical_block [11] *
                     AT_low_pc( 0x000caa6c )
                     AT_high_pc( 0x000cadca )
Line table dir : '文件路径'
Line table file: '最后是文件名test.m' line 427, column 0 with start address 0x00000000000caaa0


Looking up address: 0x00000000000caaeb in .debug_frame... found!


0x00013780: FDE
        length: 0x0000000c
   CIE_pointer: 0x00000000
    start_addr: 0x000caa60 -[CDVDetailInfo makeBaseInfo]
    range_size: 0x0000036a (end_addr = 0x000cadca)
  Instructions: 0x000caa60: CFA=4294967295+4294967295



备注:dwarfdump命令有很多参数,这里我还没有研究,只看了下简单的使用尝试了下。


补充一下:这种有时候会提示:

Looking up address: 0x00000000001d9cd5 in .debug_info... not found.

Looking up address: 0x00000000001d9cd5 in .debug_frame... not found

我们可以使用dSYM工具(别人封装的)

http://www.cocoachina.com/ios/20141219/10694.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值