2.66 有调试符号的情况下在GDB中获取结构成员的偏移 https://scz.617.cn/unix/201203201430.txt A: FatalError@stackoverflow 2012-03-20 How to get the relative address of a field in a structure dump - [2012-03-20] https://stackoverflow.com/questions/9788679/how-to-get-the-relative-address-of-a-field-in-a-structure-dump-c p/x &((struct some *)0)->member 从GDB 8.1开始可以用 ptype /o struct some 如果GDB支持Python,另有解决方案。 $ vi GetOffset.py -------------------------------------------------------------------------- import gdb class Offset ( gdb.Command ) : def __init__ (self ) : super( Offset, self ).__init__ ( 'offsetof', gdb.COMMAND_DATA ) def invoke ( self, arg, from_tty ) : arg = arg.strip() stype = gdb.lookup_type( arg ) # print( arg, '{' ) print( "%s %s" % ( arg, '{' ) ) for field in stype.fields() : print( ' %s => %#x' % ( field.name, field.bitpos // 8 ) ) print( '}' ) Offset() -------------------------------------------------------------------------- (gdb) source /tmp/GetOffset.py (gdb) offsetof struct _zend_persistent_script struct _zend_persistent_script { script => 0x0 compiler_halt_offset => 0x148 ping_auto_globals_mask => 0x150 timestamp => 0x158 corrupted => 0x160 is_phar => 0x161 mem => 0x168 size => 0x170 arena_mem => 0x178 arena_size => 0x180 dynamic_members => 0x188 } 在GDB中获取结构成员偏移有现实意义,考虑结构优化对齐对成员偏移的影响。