Linux跟踪每个函数调用 ftrace

#!/bin/bash

if test $# -ne 1; then
	echo "Usage : `basename $0 .sh` <process-id>" 1>&2
	exit 1
fi

if test ! -r /proc/$1; then
	echo "Process $1 not fount." 1>&2
	exit 1
fi

TMP_FILE=`mktemp -t`
echo "set height 0" > $TMP_FILE
echo "set logging file $1.ftrace.log" >> $TMP_FILE
echo "set logging on" >> $TMP_FILE
echo "" >> $TMP_FILE

readelf -s /proc/$1/exe | gawk '
{
	if($4=="FUNC" && $2!=0){
		print "# code for " $NF;
		print "b *0x" $2;
		print "commands";
		print "# bt 1";
		print "c";
		print "end";
		print "";
	}
}' >> $TMP_FILE

echo "bt" >> $TMP_FILE
echo "c" >> $TMP_FILE;

#cat $TMP_FILE

gdb /proc/$1/exe $1 -x $TMP_FILE

rm -f $TMP_FILE

你可能感兴趣的:(Linux跟踪每个函数调用 ftrace)