1 | <sect1 id="ch06-aboutdebug">
|
---|
2 | <title>About debugging symbols</title>
|
---|
3 |
|
---|
4 | <para>
|
---|
5 | Most programs and libraries by default are compiled with debugging
|
---|
6 | symbols and optimizing level 2 (gcc options -g and -O2) and are compiled
|
---|
7 | for a specific CPU. On Intel platforms software is compiled for i386
|
---|
8 | processors by default. If a user doesn't wish to run software on other
|
---|
9 | machines other than his own, he might want to change the default
|
---|
10 | compiler options so that they will be compiled with a higher
|
---|
11 | optimization level, no debugging symbols and generate code for his
|
---|
12 | specific architecture. Let me first explain what debugging symbols
|
---|
13 | are.
|
---|
14 | </para>
|
---|
15 |
|
---|
16 | <para>
|
---|
17 | A program compiled with debugging symbols means a user can run a program or
|
---|
18 | library through a debugger and the debugger's output will be user friendlier.
|
---|
19 | These debugging symbols also enlarge the program or library significantly.
|
---|
20 | </para>
|
---|
21 |
|
---|
22 | <para>
|
---|
23 | To remove debugging symbols from a binary (must be an a.out or ELF binary)
|
---|
24 | run <userinput>strip --strip-debug filename</userinput>. A user can use wild
|
---|
25 | cards
|
---|
26 | if he needs to strip debugging symbols from multiple files (use something like
|
---|
27 | strip --strip-debug $LFS/usr/bin/*). Another, easier, options is just
|
---|
28 | not to compile programs with debugging symbols. Most people will probably
|
---|
29 | never use a debugger on software, so by leaving those symbols out
|
---|
30 | a lot of diskspace can be saved.
|
---|
31 | </para>
|
---|
32 |
|
---|
33 | <para>
|
---|
34 | Before someone wonders if these debugging symbols would make a big difference,
|
---|
35 | here are some statistics:
|
---|
36 | </para>
|
---|
37 |
|
---|
38 | <itemizedlist>
|
---|
39 |
|
---|
40 | <listitem><para>
|
---|
41 | A dynamic Bash binary with debugging symbols: 1.2MB
|
---|
42 | </para></listitem>
|
---|
43 |
|
---|
44 | <listitem><para>
|
---|
45 | A dynamic Bash binary without debugging symbols: 478KB
|
---|
46 | </para></listitem>
|
---|
47 |
|
---|
48 | <listitem><para>
|
---|
49 | /lib and /usr/lib (glibc and gcc files) with debugging
|
---|
50 | symbols: 87MB
|
---|
51 | </para></listitem>
|
---|
52 |
|
---|
53 | <listitem><para>
|
---|
54 | /lib and /usr/lib (glibc and gcc files) without
|
---|
55 | debugging symbols: 16MB
|
---|
56 | </para></listitem>
|
---|
57 |
|
---|
58 | </itemizedlist>
|
---|
59 |
|
---|
60 | <para>
|
---|
61 | Sizes may vary depending on which compiler was used and which C library
|
---|
62 | version was used to link dynamic programs against, but results will be
|
---|
63 | similar if a user compares programs with and without debugging symbols. After
|
---|
64 | I was done with this chapter and stripped all debugging symbols from all LFS
|
---|
65 | binaries and libraries I regained a little over 102 MB of disk space. Quite
|
---|
66 | the difference.
|
---|
67 | </para>
|
---|
68 |
|
---|
69 | </sect1>
|
---|
70 |
|
---|