X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=usttrace;h=5fdb52f3e88e7fdabb2d6e55bd0c537b706841fe;hb=cdf50e9e93237343729ecedb49c080c70cd0e507;hp=fac84a1de6f3d0d93f547b2c9166c7891bf3bc75;hpb=155887202b20bc1c5e9b4c6054a80135c3273d32;p=ust.git diff --git a/usttrace b/usttrace index fac84a1..5fdb52f 100755 --- a/usttrace +++ b/usttrace @@ -7,12 +7,28 @@ function error() { echo "$0: error: $1" 2>/dev/stderr } +function sighandler() { + echo "Caught Ctrl-C" + if [ -z "$USTDPID" ]; then + USTDPID="$(<$pidfilepath)" + fi + # Tell the daemon to die + kill -SIGTERM "$USTDPID" + + echo "Waiting for ustd to shutdown..." + wait "$USTDPID" + + rm "$pidfilepath" + + exit 0; +} + USTTRACE_DIR="$(dirname $0)" if [ -x "${USTTRACE_DIR}/ustd/ustd" ] ; then # Use the not installed libraries instead USTD="${USTTRACE_DIR}/ustd/ustd" - LIBINTERFORK_PATH="${USTTRACE_DIR}/libinterfork/.libs/libinterfork.so" - LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libmallocwrap/.libs/libmallocwrap.so" + LIBINTERFORK_PATH="${USTTRACE_DIR}/libustfork/.libs/libustfork.so" + LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libustinstr-malloc/.libs/libustinstr-malloc.so" LIBUST_PATH="${USTTRACE_DIR}/libust/.libs/libust.so" else # Use the libraries that the dynamic link finds @@ -21,9 +37,9 @@ else error "cannot find an executable ustd; make sure its location is in the PATH" exit 1 fi - LIBINTERFORK_PATH="libinterfork.so" - LIBMALLOCWRAP_PATH="libmallocwrap.so" - LIBUST_PATH="libust.so" + LIBINTERFORK_PATH="libustfork.so" + LIBMALLOCWRAP_PATH="libustinstr-malloc.so" + LIBUST_PATH="libust.so.0" fi BASE_TRACE_DIR="${HOME}/.usttraces" @@ -38,15 +54,20 @@ function usage () { echo " -m Instrument malloc calls." 2>/dev/stderr echo " -f Also trace forked processes." 2>/dev/stderr echo " -s Use system-wide daemon instead of creating one for this session." 2>/dev/stderr + echo " -S Specify the subbuffer size." 2>/dev/stderr + echo " -N Specify the number of subbuffers." 2>/dev/stderr } -while getopts ":hlLmfs" options; do +while getopts ":hlLmfsWS:N:" options; do case $options in l) arg_preload_libust=1;; L) arg_ld_std_ust=1;; m) arg_preload_malloc=1;; f) arg_preload_fork=1;; s) arg_syswide_daemon=1;; + W) where=1;; + S) export UST_SUBBUF_SIZE=$OPTARG;; + N) export UST_SUBBUF_NUM=$OPTARG;; h) usage; exit 0;; \?) usage @@ -57,6 +78,11 @@ while getopts ":hlLmfs" options; do done shift $(($OPTIND - 1)) +if [ -n "$where" ]; then + echo $BASE_TRACE_DIR/$(ls "$BASE_TRACE_DIR" | tail -n 1) + exit 0 +fi + # Prepare vars CMD=$* @@ -74,7 +100,7 @@ then fi # Create directory for trace output -DATESTRING="$(hostname)-$(date +%Y%m%d%H%M%S)" +DATESTRING="$(hostname)-$(date +%Y%m%d%H%M%S%N)" OUTDIR="$BASE_TRACE_DIR/$DATESTRING" mkdir -p "$OUTDIR" @@ -84,6 +110,7 @@ USTDSOCKPATH="/tmp/ustd-sock-$$" if [ "$arg_syswide_daemon" != "1" ]; then pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid" + trap "sighandler $pidfilepath" SIGINT mkfifo -m 0600 "$pidfilepath" # Start daemon $USTD --pidfile "$pidfilepath" -s "$USTDSOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 & @@ -105,35 +132,56 @@ fi if [ "$arg_preload_libust" = "1" ]; then - if [ -n "${LIBUST_PATH%libust.so}" ] ; then - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}" + if [ -n "${LIBUST_PATH%libust.so}" ]; + then + if [ -n "$LD_LIBRARY_PATH" ]; + then + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}" + else + export LD_LIBRARY_PATH="${LIBUST_PATH%libust.so}" + fi + fi + if [ -n "$LIBUST_PATH" ]; + then + if [ -n "$LD_PRELOAD" ]; + then + export LD_PRELOAD="$LD_PRELOAD:$LIBUST_PATH" + else + export LD_PRELOAD="$LIBUST_PATH" + fi fi - export LD_PRELOAD="$LD_PRELOAD:$LIBUST_PATH" fi - if [ "$arg_ld_std_ust" = "1" ]; + if [ "$arg_ld_std_ust" = "1" ] && [ -n "${LIBUST_PATH%libust.so}" ]; then - if [ -n "$${LIBUST_PATH%libust.so}" ] ; then - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}" + if [ -n "$LD_LIBRARY_PATH" ]; + then + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}" + else + export LD_LIBRARY_PATH="${LIBUST_PATH%libust.so}" fi fi - if [ "$arg_preload_malloc" = "1" ]; + if [ "$arg_preload_malloc" = "1" ] && [ -n "$LIBMALLOCWRAP_PATH" ]; then - export LD_PRELOAD="$LD_PRELOAD:$LIBMALLOCWRAP_PATH" + if [ -n "$LD_PRELOAD" ]; + then + export LD_PRELOAD="$LD_PRELOAD:$LIBMALLOCWRAP_PATH" + else + export LD_PRELOAD="$LIBMALLOCWRAP_PATH" + fi fi - if [ "$arg_preload_fork" = "1" ]; + if [ "$arg_preload_fork" = "1" ] && [ -n "$LIBINTERFORK_PATH" ]; then - export LD_PRELOAD="$LD_PRELOAD:$LIBINTERFORK_PATH" + if [ -n "$LD_PRELOAD" ]; + then + export LD_PRELOAD="$LD_PRELOAD:$LIBINTERFORK_PATH" + else + export LD_PRELOAD="$LIBINTERFORK_PATH" + fi fi -# Install a handler for SIGIO. This is the signal that will be sent by ustd to -# the traced program to trigger the creation of its listener thread. However, -# it is possible that the SIGIO will be sent after the shell fork, but before -# the exec of the command. If this handler isn't there, bash might terminate -# because of a unhandled signal. - # Execute the command $CMD 2>&1 ) | tee "$OUTDIR/app.log"