The ELF loader loads segments, not sections; the mapping from sections to segments is determined by the linker script used for building the executable.
The default linker script does not map debug sections to any segment, so this is omitted.
Symbol information comes in two flavours: static symbols are processed out-of-band and never stored as section data; dynamic symbol tables are generated by the linker and added to a special segment that is loaded along with the executable, as it needs to be accessible to the dynamic linker. The strip
command only removes the static symbols, which are never referenced in a segment anyway.
So, you can use full debug information through the entire process, and this will not affect the size of the executable image in RAM, as it is not loaded. This also means that the information is not included in core dumps, so this does not give you any benefit here either.
The objcopy
utility has a special option to copy only the debug information, so you can generate a second ELF file containing this information and use stripped binaries; when analyzing the core dump, you can then load both files into the debugger:
objcopy --only-keep-debug myprogram myprogram.debug
strip myprogram
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…