2013-04-16 23:59:09 -04:00
|
|
|
#!/bin/bash
|
2013-04-16 23:59:32 -04:00
|
|
|
|
2013-04-17 00:00:07 -04:00
|
|
|
nsamples=1
|
2013-04-16 23:59:09 -04:00
|
|
|
sleeptime=1
|
2013-04-16 23:59:32 -04:00
|
|
|
|
2013-04-17 00:00:07 -04:00
|
|
|
while [ $# -gt 0 ] ; do
|
|
|
|
arg=$1;
|
|
|
|
if [[ $arg =~ --(.*)=(.*) ]] ; then
|
|
|
|
eval ${BASH_REMATCH[1]}=${BASH_REMATCH[2]}
|
|
|
|
else
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
shift
|
|
|
|
done
|
|
|
|
|
2013-04-16 23:59:32 -04:00
|
|
|
# change the process name
|
2013-04-17 00:00:07 -04:00
|
|
|
pid=$*
|
2013-04-16 23:59:09 -04:00
|
|
|
|
2013-04-16 23:59:32 -04:00
|
|
|
# may need the cilk gdb
|
|
|
|
|
2013-04-16 23:59:09 -04:00
|
|
|
for x in $(seq 1 $nsamples)
|
|
|
|
do
|
|
|
|
gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid
|
|
|
|
sleep $sleeptime
|
|
|
|
done | \
|
|
|
|
awk '
|
|
|
|
BEGIN { s = ""; }
|
2013-04-16 23:59:32 -04:00
|
|
|
/^Thread/ { if (s != "") print s; s = ""; }
|
2013-04-17 00:00:11 -04:00
|
|
|
/^\#/ { if ($3 == "in") { v = $4; } else { v = $2 } if (s != "" ) { s = s "," v} else { s = v } }
|
2013-04-16 23:59:09 -04:00
|
|
|
END { print s }' | \
|
|
|
|
sort | uniq -c | sort -r -n -k 1,1
|