how to decode .dSYM file to explicit DWARF format?

2020-07-17 05:36发布

问题:

DWARF is a debugging information format. The .dSYM file generated by Xcode contain the DWARF debugging information.

The Question is : how to decode the .dSYM file to get the human-readable DWARF information, which should like below.

回答1:

On Mac OS X, you use the dwarfdump utility to dump the DWARF in .o files or in .dSYM bundles.

% dwarfdump fig7.o
----------------------------------------------------------------------
 File: fig7.o (x86_64)
----------------------------------------------------------------------
.debug_info contents:

0x00000000: Compile Unit: length = 0x00000077  version = 0x0002  abbr_offset = 0x00000000  addr_size = 0x08  (next CU at 0x0000007b)

0x0000000b: TAG_compile_unit [1] *
             AT_producer( "Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)" )
             AT_language( DW_LANG_C99 )
             AT_name( "fig7.c" )
             AT_low_pc( 0x0000000000000000 )
             AT_stmt_list( 0x00000000 )
             AT_comp_dir( "/tmp" )

0x00000026:     TAG_base_type [2]  
                 AT_name( "int" )
                 AT_encoding( DW_ATE_signed )
                 AT_byte_size( 0x04 )

0x0000002d:     TAG_variable [3]  
                 AT_name( "a" )
                 AT_type( {0x00000026} ( int ) )
                 AT_external( 0x01 )
                 AT_decl_file( "/private/tmp/fig7.c" )
                 AT_decl_line( 1 )
                 AT_location( [0x0000000000000000] )

0x00000043:     TAG_subprogram [4] *
                 AT_name( "foo" )
                 AT_decl_file( "/private/tmp/fig7.c" )
                 AT_decl_line( 2 )
                 AT_external( 0x01 )
                 AT_low_pc( 0x0000000000000000 )
                 AT_high_pc( 0x0000000000000006 )
                 AT_frame_base( rbp )

0x0000005d:         TAG_variable [5]  
                     AT_name( "b" )
                     AT_decl_file( "/private/tmp/fig7.c" )
                     AT_decl_line( 4 )
                     AT_type( {0x00000026} ( int ) )
                     AT_location( fbreg -4 )

0x0000006b:         TAG_variable [5]  
                     AT_name( "c" )
                     AT_decl_file( "/private/tmp/fig7.c" )
                     AT_decl_line( 5 )
                     AT_type( {0x00000026} ( int ) )
                     AT_location( fbreg -8 )

0x00000079:         NULL

0x0000007a:     NULL