diff --git a/config/CMakeChaos.txt b/config/CMakeChaos.txt index 49e59bc924d4f7c69950b133bc719e07b1f82e87..43c434a34c5ed0fad9be8438a2f8c65d082baca5 100644 --- a/config/CMakeChaos.txt +++ b/config/CMakeChaos.txt @@ -69,6 +69,14 @@ ELSE() MESG("BUILD TYPE:${CMAKE_BUILD_TYPE}") ENDIF() +if(CMAKE_BUILD_TYPE MATCHES SANITIZE) + MESG("ENABLING PROFILE") + set (CHAOS_CXX_FLAGS "${CHAOS_CXX_FLAGS} -g -fsanitize=address") + set (CHAOS_C_FLAGS "${CHAOS_C_FLAGS} -g -fsanitize=address") +ELSE() + MESG("BUILD TYPE:${CMAKE_BUILD_TYPE}") +ENDIF() + set (BOOST_CXX_ADDITIONAL_FLAGS "") IF(CHAOS_ENABLE_C11 AND NOT CHAOS_TARGET) set (CHAOS_CXX_FLAGS "${CHAOS_CXX_FLAGS} -std=c++11") diff --git a/tools/common_util.sh b/tools/common_util.sh index 6af5042d4d2a671419ca149630b13dc94d4b161e..6ce2ecaeb2c6c72df7958bb3ee58e24aadaa6534 100644 --- a/tools/common_util.sh +++ b/tools/common_util.sh @@ -365,12 +365,17 @@ stop_proc(){ pid=`get_pid "$1"` for p in $pid;do if [ -n "$p" ]; then - if ! kill -9 $p ; then - error_mesg "cannot kill process $p" - exit 1 - else - ok_mesg "process $1 ($p) killed" + ## kill gently + kill -SIGQUIT $p + sleep 1 + pid=`get_pid "$p"` + if [ -n "$pid" ]; then + if ! kill -9 $p ; then + error_mesg "cannot kill process $p" + exit 1 + fi fi + ok_mesg "process $1 ($p) killed" else warn_mesg "process $1 ($p) " "not running" @@ -467,7 +472,7 @@ run_proc(){ debug="" if [ -n "$GOOGLE_PROFILE" ];then debug="$GOOGLE_PROFILE " - info_mesg "google heap check " "enabled" + info_mesg "google heap check for '$process_name' " "enabled" elif [ -n "$CHAOS_DEBUG_CMD" ];then echo "set disable-randomization off" > /tmp/gdbbatch echo "run" >> /tmp/gdbbatch @@ -487,7 +492,10 @@ run_proc(){ cmdline="$debug $run_prefix $command_line" fi - eval $cmdline + eval $cmdline + if [ -n "$GOOGLE_PROFILE" ];then + sleep 1 + fi if [ $? -eq 0 ]; then pid=$! sleep 1 @@ -512,7 +520,7 @@ run_proc(){ else echo "$cmdline" > $CHAOS_PREFIX/log/$process_name.cmdline.errlaunch.log - error_mesg "error lunching $process_name" + error_mesg "error lunching $process_name cmdline: '$cmdline'" exit 1 fi return 0 diff --git a/tools/generateGoogleProfilePdf.sh b/tools/generateGoogleProfilePdf.sh new file mode 100755 index 0000000000000000000000000000000000000000..83f1b9d507f281e3c71f924b8505ab7d3f1ef296 --- /dev/null +++ b/tools/generateGoogleProfilePdf.sh @@ -0,0 +1,21 @@ +#!/bin/bash +echo "* looking .heap in $1 using prefix $2" +heapls=`find $1 -name "*.heap"` +for heapf in $heapls;do + echo "* processing $heapf" + if [[ $heapf =~ \/([[:alpha:]]+)\.(.+)\.(.+)\.heap$ ]];then + pname=${BASH_REMATCH[1]} + ppid=${BASH_REMATCH[2]} +# echo "program name:$pname" +# echo "program pid:$ppid" + if [ ! -x $2/$pname ];then + echo "## cannot find executable $2/$pname" + exit 1 + fi + if google-pprof $2/$pname "$heapf" --inuse_objects --lines --heapcheck --edgefraction=1e-10 --nodefraction=1e-10 --pdf > $pname.$ppid.pdf;then + echo "* generated $pname.$ppid.pdf" + else + echo "## error processing $heapf" + fi + fi +done