75 lines
2.4 KiB
Plaintext
75 lines
2.4 KiB
Plaintext
Debugging util-linux programs
|
|
=============================
|
|
|
|
How to deal libtool
|
|
-------------------
|
|
|
|
There are considerations to be made when profiling or debugging some programs
|
|
found in the util-linux package. Because wrapper scripts are used for the
|
|
binaries to make sure all library dependencies are met, you cannot use tools
|
|
such as gdb or valgrind directly with them.
|
|
|
|
Let's take for example the mount command:
|
|
|
|
$> cd /path/to/util-linux
|
|
$> file mount/mount
|
|
mount/mount: Bourne-Again shell script text executable
|
|
|
|
The binary itself is located in the mount/.libs/ directory:
|
|
|
|
$> file mount/.libs/mount
|
|
mount/.libs/mount: ELF 64-bit LSB executable, x86-64, version 1 \
|
|
(SYSV), dynamically linked (uses shared libs) [...]
|
|
|
|
When this command is run, there's a library dependency error:
|
|
|
|
$> mount/.libs/mount
|
|
mount/.libs/mount: /lib/libblkid.so.1: version `BLKID_2.20' not found \
|
|
(required by mount/.libs/mount)
|
|
|
|
To overcome this we need set the LD_LIBRARY_PATH variable to read the path of
|
|
the shared lib found in the sources, and not system-wide:
|
|
|
|
$> export LD_LIBRARY_PATH=$PWD/libblkid/src/.libs/:$LD_LIBRARY_PATH
|
|
|
|
Now external debugging tools can be run on the binary.
|
|
|
|
Happy hacking!
|
|
Davidlohr Bueso, August 2011
|
|
|
|
|
|
The libmount & libblkid
|
|
-----------------------
|
|
|
|
Both of the libraries can be debugged by setting an environment variable
|
|
consisting of a number. The number will be used as a bit mask, so the more 1 the
|
|
higher the debugging level. Search for `DEBUG' from files
|
|
|
|
libblkid/src/blkidP.h
|
|
libmount/src/mountP.h
|
|
|
|
to see what the different bits mean. At the time of writing this the following
|
|
enabled full debug.
|
|
|
|
export LIBBLKID_DEBUG=all
|
|
export LIBMOUNT_DEBUG=all
|
|
export LIBFDISK_DEBUG=all
|
|
export LIBSMARTCOLS_DEBUG=all
|
|
|
|
The libblkid reads by default /etc/blkid.conf which can be overridden by the
|
|
environment variable BLKID_CONF. See manual libblkid/libblkid.3 for details
|
|
about the configuration file.
|
|
|
|
Block device information is normally kept in a cache file (see blkid man page
|
|
for more information about the cache file location) that can be overridden by
|
|
the environment variable BLKID_FILE.
|
|
|
|
To libmount uses three paths, which can be overridden by using environment
|
|
variables. Notice that these environment variables are ignored for non-root
|
|
users.
|
|
|
|
env variable if not set defaults to
|
|
LIBMOUNT_FSTAB /etc/fstab
|
|
LIBMOUNT_MTAB /etc/mtab
|
|
LIBMOUNT_UTAB /run/mount/utab or /dev/.mount/utab
|