WANTED: busybox debugging guide

John Spencer maillist-busybox at barfooze.de
Sat Jan 4 21:10:55 UTC 2014


how to get a well debuggable busybox binary ?

whenever i try to debug busybox, gdb (7.6.2) is completely clueless, 
especially upon entering applet_main. for example in ping.c, after 
breaking on ping_main, gdb lists the BSD copyright header at the end of 
the file as the actual sourceline. stepping with "n" just makes the 
program run through.

so in the end i end up extracting all the needed code and stuff it into 
a standalone C file so i can manage to build it with my own debug 
CFLAGS, without -fomit-framepointer, FAST_FUNC, MAIN_EXTERNALLY_VISIBLE, 
and all the weird microoptimization c/ldflags/macros that are hardcoded 
everywhere, as well as the multiple levels of main() indirection. the 
trylink script is also completely useless for debugging as it uses 
dozens of exotic and untested ld flags to shave off a byte or 2.

i use the following to build busybox in "debug mode"

if [ ! -z "$DEBUGBUILD" ] ; then
         debugcflags="-O0 -g"
         sed -i 's/# CONFIG_DEBUG is not set/CONFIG_DEBUG=y/' .config
         sed -i 's/# CONFIG_DEBUG_PESSIMIZE is not 
set/CONFIG_DEBUG_PESSIMIZE=y/' .config
         sed -i 's/CONFIG_NO_DEBUG_LIB=y/# CONFIG_NO_DEBUG_LIB is not 
set/' .config
fi

make V=1 LDFLAGS=-static HOSTLDFLAGS=-static \
CFLAGS_busybox="$debugcflags -Wl,-z,muldefs 
-Werror-implicit-function-declaration" \
HOSTCC="$CC -static" CC="$CC -static" HOSTCFLAGS=-D_GNU_SOURCE

and then use busybox_unstripped.

i'm pretty sure there must be a better way as i cant imagine anyone 
debugging busybox copy/pasting for hours. any tips are welcome.


More information about the busybox mailing list