title: how to distinguish debug and release executables on linux
body: <p>I have a program with debug and release version. Here's their size:</p>
  
  <pre><code>[root@build]$ ll -h debug release 
  -rwxr-xr-x. 1 root root  12M Dec 29 11:49 debug
  -rwxr-xr-x. 1 root root 3.6M Dec 29 11:51 release
  </code></pre>
  
  <p>I want to distinguish debug version and release version on linux with just one or two commands, but i don't know how to do that. When I compile my programs with option -g, debug version was created. And here's command <strong><em>readelf -S debug</em></strong> output:</p>
  
  <pre><code>There are 41 section headers, starting at offset 0xa0bb88:
  
  Section Headers:
    [Nr] Name              Type             Address           Offset
         Size              EntSize          Flags  Link  Info  Align
    [ 0]                   NULL             0000000000000000  00000000
         0000000000000000  0000000000000000           0     0     0
    [ 1] .interp           PROGBITS         0000000000400238  00000238
         000000000000001c  0000000000000000   A       0     0     1
    [ 2] .note.ABI-tag     NOTE             0000000000400254  00000254
         0000000000000020  0000000000000000   A       0     0     4
    [ 3] .hash             HASH             0000000000400278  00000278
         00000000000132f0  0000000000000004   A       4     0     8
    [ 4] .dynsym           DYNSYM           0000000000413568  00013568
         0000000000042fd8  0000000000000018   A       5     1     8
    [ 5] .dynstr           STRTAB           0000000000456540  00056540
         00000000000dfa70  0000000000000000   A       0     0     1
    [ 6] .gnu.version      VERSYM           0000000000535fb0  00135fb0
         0000000000005952  0000000000000002   A       4     0     2
    [ 7] .gnu.version_r    VERNEED          000000000053b908  0013b908
         0000000000000250  0000000000000000   A       5     9     8
    [ 8] .rela.dyn         RELA             000000000053bb58  0013bb58
         0000000000000c78  0000000000000018   A       4     0     8
    [ 9] .rela.plt         RELA             000000000053c7d0  0013c7d0
         0000000000002958  0000000000000018   A       4    11     8
    [10] .init             PROGBITS         000000000053f128  0013f128
         0000000000000018  0000000000000000  AX       0     0     4
    [11] .plt              PROGBITS         000000000053f140  0013f140
         0000000000001ba0  0000000000000010  AX       0     0     4
    [12] .text             PROGBITS         0000000000540ce0  00140ce0
         0000000000136368  0000000000000000  AX       0     0     16
    [13] .fini             PROGBITS         0000000000677048  00277048
         000000000000000e  0000000000000000  AX       0     0     4
    [14] .rodata           PROGBITS         0000000000677080  00277080
         0000000000024480  0000000000000000   A       0     0     64
    [15] .eh_frame_hdr     PROGBITS         000000000069b500  0029b500
         00000000000111ec  0000000000000000   A       0     0     4
    [16] .eh_frame         PROGBITS         00000000006ac6f0  002ac6f0
         000000000005058c  0000000000000000   A       0     0     8
    [17] .gcc_except_table PROGBITS         00000000006fcc7c  002fcc7c
         000000000000a850  0000000000000000   A       0     0     4
    [18] .tdata            PROGBITS         00000000009074d0  003074d0
         0000000000000004  0000000000000000 WAT       0     0     8
    [19] .tbss             NOBITS           00000000009074d8  003074d4
         000000000001b4d8  0000000000000000 WAT       0     0     8
    [20] .preinit_array    PREINIT_ARRAY    00000000009074d8  003074d8
         0000000000000008  0000000000000000  WA       0     0     8
    [21] .ctors            PROGBITS         00000000009074e0  003074e0
         0000000000000158  0000000000000000  WA       0     0     8
    [22] .dtors            PROGBITS         0000000000907638  00307638
         0000000000000010  0000000000000000  WA       0     0     8
    [23] .jcr              PROGBITS         0000000000907648  00307648
         0000000000000008  0000000000000000  WA       0     0     8
    [24] .data.rel.ro      PROGBITS         0000000000907680  00307680
         0000000000004990  0000000000000000  WA       0     0     64
    [25] .dynamic          DYNAMIC          000000000090c010  0030c010
         0000000000000240  0000000000000010  WA       5     0     8
    [26] .got              PROGBITS         000000000090c250  0030c250
         0000000000000310  0000000000000008  WA       0     0     8
    [27] .got.plt          PROGBITS         000000000090c560  0030c560
         0000000000000de0  0000000000000008  WA       0     0     8
    [28] .data             PROGBITS         000000000090d340  0030d340
         0000000000000fe0  0000000000000000  WA       0     0     64
    [29] .bss              NOBITS           000000000090e340  0030e320
         0000000000c18a38  0000000000000000  WA       0     0     64
    [30] .comment          PROGBITS         0000000000000000  0030e320
         000000000000003e  0000000000000001  MS       0     0     1
    [31] .debug_aranges    PROGBITS         0000000000000000  0030e35e
         00000000000200b0  0000000000000000           0     0     1
    [32] .debug_info       PROGBITS         0000000000000000  0032e40e
         000000000033aded  0000000000000000           0     0     1
    [33] .debug_abbrev     PROGBITS         0000000000000000  006691fb
         00000000000296ae  0000000000000000           0     0     1
    [34] .debug_line       PROGBITS         0000000000000000  006928a9
         0000000000068038  0000000000000000           0     0     1
    [35] .debug_str        PROGBITS         0000000000000000  006fa8e1
         00000000001afb89  0000000000000001  MS       0     0     1
    [36] .debug_loc        PROGBITS         0000000000000000  008aa46a
         000000000010b830  0000000000000000           0     0     1
    [37] .debug_ranges     PROGBITS         0000000000000000  009b5c9a
         0000000000055d70  0000000000000000           0     0     1
    [38] .shstrtab         STRTAB           0000000000000000  00a0ba0a
         000000000000017b  0000000000000000           0     0     1
    [39] .symtab           SYMTAB           0000000000000000  00a0c5c8
         00000000000562f8  0000000000000018          40   3277     8
    [40] .strtab           STRTAB           0000000000000000  00a628c0
         00000000000fa11b  0000000000000000           0     0     1
  Key to Flags:
    W (write), A (alloc), X (execute), M (merge), S (strings)
    I (info), L (link order), G (group), x (unknown)
    O (extra OS processing required) o (OS specific), p (processor specific)
  </code></pre>
  
  <p>And without -g option, release version created, here's <strong><em>readelf -S release</em></strong> outputs:</p>
  
  <pre><code>    There are 39 section headers, starting at offset 0x3290b8:
  
  Section Headers:
    [Nr] Name              Type             Address           Offset
         Size              EntSize          Flags  Link  Info  Align
    [ 0]                   NULL             0000000000000000  00000000
         0000000000000000  0000000000000000           0     0     0
    [ 1] .interp           PROGBITS         0000000000400238  00000238
         000000000000001c  0000000000000000   A       0     0     1
    [ 2] .note.ABI-tag     NOTE             0000000000400254  00000254
         0000000000000020  0000000000000000   A       0     0     4
    [ 3] .hash             HASH             0000000000400278  00000278
         0000000000008558  0000000000000004   A       4     0     8
    [ 4] .dynsym           DYNSYM           00000000004087d0  000087d0
         0000000000019f98  0000000000000018   A       5     1     8
    [ 5] .dynstr           STRTAB           0000000000422768  00022768
         000000000003d80b  0000000000000000   A       0     0     1
    [ 6] .gnu.version      VERSYM           000000000045ff74  0005ff74
         00000000000022a2  0000000000000002   A       4     0     2
    [ 7] .gnu.version_r    VERNEED          0000000000462218  00062218
         0000000000000200  0000000000000000   A       5     8     8
    [ 8] .rela.dyn         RELA             0000000000462418  00062418
         0000000000000840  0000000000000018   A       4     0     8
    [ 9] .rela.plt         RELA             0000000000462c58  00062c58
         00000000000020e8  0000000000000018   A       4    11     8
    [10] .init             PROGBITS         0000000000464d40  00064d40
         0000000000000018  0000000000000000  AX       0     0     4
    [11] .plt              PROGBITS         0000000000464d58  00064d58
         0000000000001600  0000000000000010  AX       0     0     4
    [12] .text             PROGBITS         0000000000466360  00066360
         00000000000e6a28  0000000000000000  AX       0     0     16
    [13] .fini             PROGBITS         000000000054cd88  0014cd88
         000000000000000e  0000000000000000  AX       0     0     4
    [14] .rodata           PROGBITS         000000000054cdc0  0014cdc0
         000000000001d3f0  0000000000000000   A       0     0     64
    [15] .eh_frame_hdr     PROGBITS         000000000056a1b0  0016a1b0
         00000000000068e4  0000000000000000   A       0     0     4
    [16] .eh_frame         PROGBITS         0000000000570a98  00170a98
         0000000000025e7c  0000000000000000   A       0     0     8
    [17] .gcc_except_table PROGBITS         0000000000596914  00196914
         0000000000009914  0000000000000000   A       0     0     4
    [18] .tbss             NOBITS           00000000007a0228  001a0228
         0000000000000950  0000000000000000 WAT       0     0     8
    [19] .ctors            PROGBITS         00000000007a0228  001a0228
         0000000000000130  0000000000000000  WA       0     0     8
    [20] .dtors            PROGBITS         00000000007a0358  001a0358
         0000000000000010  0000000000000000  WA       0     0     8
    [21] .jcr              PROGBITS         00000000007a0368  001a0368
         0000000000000008  0000000000000000  WA       0     0     8
    [22] .data.rel.ro      PROGBITS         00000000007a0380  001a0380
         0000000000003bd0  0000000000000000  WA       0     0     64
    [23] .dynamic          DYNAMIC          00000000007a3f50  001a3f50
         0000000000000210  0000000000000010  WA       5     0     8
    [24] .got              PROGBITS         00000000007a4160  001a4160
         0000000000000158  0000000000000008  WA       0     0     8
    [25] .got.plt          PROGBITS         00000000007a42b8  001a42b8
         0000000000000b10  0000000000000008  WA       0     0     8
    [26] .data             PROGBITS         00000000007a4e00  001a4e00
         00000000000007c0  0000000000000000  WA       0     0     64
    [27] .bss              NOBITS           00000000007a55c0  001a55c0
         0000000000002038  0000000000000000  WA       0     0     64
    [28] .comment          PROGBITS         0000000000000000  001a55c0
         000000000000003e  0000000000000001  MS       0     0     1
    [29] .debug_aranges    PROGBITS         0000000000000000  001a55fe
         0000000000000e10  0000000000000000           0     0     1
    [30] .debug_info       PROGBITS         0000000000000000  001a640e
         00000000000a1d76  0000000000000000           0     0     1
    [31] .debug_abbrev     PROGBITS         0000000000000000  00248184
         000000000000b09d  0000000000000000           0     0     1
    [32] .debug_line       PROGBITS         0000000000000000  00253221
         00000000000113c8  0000000000000000           0     0     1
    [33] .debug_str        PROGBITS         0000000000000000  002645e9
         000000000001731a  0000000000000001  MS       0     0     1
    [34] .debug_loc        PROGBITS         0000000000000000  0027b903
         00000000000923ad  0000000000000000           0     0     1
    [35] .debug_ranges     PROGBITS         0000000000000000  0030dcb0
         000000000001b2a0  0000000000000000           0     0     1
    [36] .shstrtab         STRTAB           0000000000000000  00328f50
         0000000000000165  0000000000000000           0     0     1
    [37] .symtab           SYMTAB           0000000000000000  00329a78
         0000000000021048  0000000000000018          38   1203     8
    [38] .strtab           STRTAB           0000000000000000  0034aac0
         000000000004b633  0000000000000000           0     0     1
  Key to Flags:
    W (write), A (alloc), X (execute), M (merge), S (strings)
    I (info), L (link order), G (group), x (unknown)
    O (extra OS processing required) o (OS specific), p (processor specific)
  </code></pre>
  
  <p>The two condition differs in the number of section headers. It seems that i can't distinguish the two version with this command. Any other solutions ?</p>