Programming Tools

advertisement
Programming Tools






gcc
make utility
Open Source code
Static and Shared Libraries
gdb
Memory debugging tools
GCC


gcc – compile and
link
Compile options





-o outfile
-c
-Dname
-Idir
-Ldir





-lname
-Wall
-On
-Os
-g
Make Utility





“easy” compilation of complex programs
Requires creation of a makefile
Usage: make [target]
Looks for Makefile or makefile or
GNUMakefile. Use –f to specify a
makefile filename
If no target given when running make,
it will use the first one.
Using Make Macros


Can define macros using macro=val
pairs.
Commonly defined macros




CC
OBJS
CFLAGS
LDLIBS
Special Macros


$@ - The target of this rule
$< - The first dependency of this rule
Suffix Rules
Make has built in rules for compiling
certain things based on the suffix of the
file
.c.o:
$(CC) –c $(CFLAGS) –o $@ $<
 Adding custom suffixes
.SUFFIXES: .dat

Pattern Rules

More powerful than suffix rules

Can have dependencies
Matches patterns provided
%.o : %.c
$(CC) –c $(CFLAGS) –o $@ $<

Commonly Expected Targets




all
install
uninstall
clean
Phony Targets


Sometimes we need to specify a rule
has no corresponding file
Use the .PHONY directive
.PHONY: target
Open Source Code

GNU Build System



Autoconf
Automake
Libtool
Installing Open Source
Software

Download the tarball




tar ztvf bash.tar.gz
tar zxvf bash.tar.gz
tar jxvf bash.tar.bz2
Compile and install



./configure
make – compile only
make install – compile and install
Libraries

Static Libraries (lib*.a files)



Collection of object (*.o) files
Maintains a table of what symbols are
defined by what object files
Created using archiver utility
ar rcs libfoo.a obj1.o obj2.o obj3.o
Compiling Against Static
Libraries
Functions copied from library into
binary during linking
gcc –c –o hello.o hello.c
ar rcs libhello.a hello.o
gcc –Wall –c main.c –o main.o
gcc –o hello main.o –L. –lhello
./hello

Shared Libraries

One copy of code in library that multiple
programs can use




Smaller programs
Easier to make updates
Portability issues
Backward compatibility
Creating Shared Libraries
Position Independent Code –fPIC
 Don’t use –fomit-frame-pointer
gcc –fPIC –c hello.c –o hello.o
gcc –shared –Wl,-soname,libfoo.so.1 –o
libfoo.so.1.5 hello.o

Compiling Against The Shared
Library

System must know where to find the library.





/usr/lib
/lib
Otherwise, add to LD_LIBRARY_PATH
Define during program execution with
LD_LIBRARY_PATH = /path/to/lib ./progname
Compile against the library

gcc main.c –o main –L. -lhello
GNU Debugger (gdb)



Command Line Debugger
Compile program with –g flag
Run program through debugger


gdb progname
gdb can examine core files

gdb progname corefile
gdb commands

list / l



break / b


Lists lines of source code. Default is 10
lines around current address.
Can specify range: l 5,10
Sets a breakpoint on a given line
clear / delete

Remove breakpoint(s)
gdb commands (cont)

run / r


next / n


Starts the program to be debugged running from
the begging until the first breakpoint
Executes the next instruction. Does not step into
functions!
step / s

Executes the next instruction. Does step into
functions!
gdb commands (cont)

command breakpointnum


display


Allows a list of commands to be run when
the breakpoint is encountered
Displays some value at every breakpoint
undisplay

Cancels the display command
gdb commands (cont)

print / p


set


Sets the value of a variable
set option=10
where / w


Displays the value of an expression
“p option” will print the value of the variable
“option”
Prints a backtrace.
continue / c

Continues executing the program
GLIBC Memory Debugging

Common Problems



Memory Leaks
Buffer Over/Under flow
Tools


env variable MALLOC_CHECK_
mcheck library
GLIBC Memory Debugging
MALLOC_CHECK_

MALLOC_CHECK_=1 ./badmem


prints any warning to stderr
MALLOC_CHECK_=2 ./badmem

prints warning to stderr and calls abort()
GLIBC Memory Debugging
mcheck

Link against mcheck library


gcc –g badmem.c –o badmem –lmcheck
Through gdb


Set breakpoint for main
Add a command for that breakpoint



“call mcheck(0)”
“continue”
In all cases, mcheck must be called before
any calls to malloc!
Memory Debugging

Preventing overflows with “electric
fence”



Link with –lefence
Provides new form of malloc that allocates
additional space after requested space
Any attempt to write to that space will
cause the Kernel to kill the process with
SIGSEGV
Memory Debugging

Tracing Memory Leaks


Set env MALLOC_TRACE to a logfile
Call mtrace from gdb
Memory Debugging

Other tools






mpr – Memory allocation profiler
gcov – Coverate test tool
strace – Trace system calls during execution
ltrace – Trace library calls during execution
mtrace – Trace memory allocation
valgrind – debugging suite of tools
Download