aboutsummaryrefslogtreecommitdiffstats
path: root/chapter06/aboutdebug.xml
blob: 5bd7a671e31e4669f9a79df2fc078aaf04c308b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<sect1 id="ch06-aboutdebug">
<title>About debugging symbols</title>

<para>
Most programs and libraries by default are compiled with debugging
symbols and optimizing level 2 (gcc options -g and -O2) and are compiled
for a specific CPU. On Intel platforms software is compiled for i386
processors by default. If you don't wish to run software on other
machines other than your own, you might want to change the default
compiler options so that they will be compiled with a higher
optimization level, no debugging symbols and generate code for your
specific architecture. Let me first explain what debugging symbols
are.
</para>

<para>
A program compiled with debugging symbols means you can run a program or 
library through a debugger and the debugger's output will be user friendlier. 
These debugging symbols also  enlarge the program or library significantly. 
</para>

<para>
To remove debugging symbols from a binary (must be an a.out or ELF binary)
run <userinput>strip --strip-debug filename</userinput> You can use wild cards
if you need to strip debugging symbols from multiple files (use something like
strip --strip-debug $LFS/usr/bin/*). Another, easier, options is just
not to compile programs with debugging symbols. Most people will probably
never use a debugger on software, so by leaving those symbols out you
can save a lot of diskspace.
</para>

<para>
Before you wonder if these debugging symbols would make a big difference, 
here are some statistics:
</para>

<itemizedlist>

<listitem><para>
        A dynamic Bash binary with debugging symbols: 1.2MB
</para></listitem>

<listitem><para>
        A dynamic Bash binary without debugging symbols: 478KB
</para></listitem>

<listitem><para>
        /lib and /usr/lib (glibc and gcc files) with debugging
                symbols: 87MB
</para></listitem>

<listitem><para>
        /lib and /usr/lib (glibc and gcc files) without
                debugging symbols: 16MB
</para></listitem>

</itemizedlist>

<para>
Sizes may vary depending on which compiler was used and which C library
version was used to link dynamic programs against, but your results will be
similar if you compare programs with and without debugging symbols. After
I was done with this chapter and stripped all debugging symbols from all LFS
binaries and libraries I regained a little over 102 MB of disk space. Quite
the difference.
</para>

</sect1>