-[__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