diff --git a/src/plugins/e-acsl/scripts/testrun.sh b/src/plugins/e-acsl/scripts/testrun.sh
index 8b3507307dc54b6062ead3239e0320107cdb482a..85b470828058ccb1f358747c7dd8c9d60e53e22b 100755
--- a/src/plugins/e-acsl/scripts/testrun.sh
+++ b/src/plugins/e-acsl/scripts/testrun.sh
@@ -39,7 +39,7 @@
 #   $3 - if specified this script re-runs test sequence generating using
 #       -e-acsl-gmp-only option
 #   $4 - extra flags for e-acsl-gcc.sh
-#   $5 - debug flag
+#   $5 - debug flag - pring extra messages and retain log files
 
 set -e
 
@@ -50,38 +50,61 @@ EXTRA="$4" # Extra flags for e-acsl-gcc.sh
 DEBUG="$5" # Debug flag
 
 ROOTDIR="`readlink -f $(dirname $0)/../`" # Root directory of the repository
-TESTDIR="$ROOTDIR/tests/$PREFIX"
-RESDIR=$TESTDIR/result # result directory within the test suite
+TESTDIR="$ROOTDIR/tests/$PREFIX" # Test suite directory
+RESDIR=$TESTDIR/result # Result directory within the test suite
 TESTFILE=`ls $TESTDIR/$TEST.[ic]` # Source test file
-MODEL="bittree" # Memory model to link against.
+MODEL="bittree" # Memory model to link against
 
 LOG="$RESDIR/$TEST.testrun" # Base name for log files
 OUT="$RESDIR/gen_$TEST"     # Base name for output
-RUNS=1
+RUNS=1                      # Nth run of `run_test` function
 
+# Print a message if the DEBUG flag is set
 debug() {
   if [ -n "$DEBUG" ]; then
-    echo "$1" 1>&2
+    echo " ** DEBUG: $1" 1>&2
+  fi
+}
+
+# Clean up log/output files unless the DEBUG flag is set
+clean() {
+  if [ -z "$DEBUG" ]; then
+    rm -f $LOG.* $OUT.*
   fi
 }
 
 # Error reporting
+#  $1 - error message
+#  $2 - log file. If supplied the contents of the log file are dumpmed to
+#     STDERR with each line prefixed by ' > '.
 error() {
   echo "Error: $1" 1>&2
-  debug "See $2 for details"
+  if [ -n "$2" ]; then
+    cat $2 2>&1 | sed 's/^/ > /' 1>&2
+    debug "See $2 for details"
+  fi
   exit 1
 }
 
-# Clean up log/output files unless the DEBUG flag is set
-clean() {
-    if [ -z "$DEBUG" ]; then
-        rm -f $LOG.* $OUT.*
-    fi
-}
-
  # Do clean up on exit
 trap "clean" EXIT HUP INT QUIT TERM
 
+# Run executable and report results
+#  $1 - path to an executable
+#  $2 - file for logging the outputs of the command
+#  $3 - the type of the executable (e.g., original executable
+#    or an executable generated from the instrumented sources)
+run_executable() {
+  local executable="$1"
+  local log="$2"
+  local type="$3"
+
+  debug "Run and log $executable"
+  if ! `$executable > $log 2>&1`; then
+    error "[$3 run]: Runtime failure in test case $TEST:" $log
+  fi
+}
+
 # Instrument the given test using e-acsl-gcc.sh and compare outputs of the
 # executables generated from instrumented and non-instrumented sources
 run_test() {
@@ -93,27 +116,26 @@ run_test() {
 
   # Command for instrumenting the source file and compiling the original
   # and the instrumented code
-  EACSL_GCC="./scripts/e-acsl-gcc.sh
-    --compile $TESTFILE --ocode=$ocode --logfile=$logfile
+  EACSL_GCC="./scripts/e-acsl-gcc.sh \
+    --compile $TESTFILE --ocode=$ocode --logfile=$logfile \
     --memory-model=$MODEL --oexec=$oexec $extra"
 
   debug "Run $EACSL_GCC"
   $EACSL_GCC || error "Command $EACSL_GCC failed" "$logfile"
 
   # Log outputs of the generated executables
-  debug "Run and log native execution to $oexeclog.native"
-  $oexec        > $oexeclog.native 2>&1
-  debug "Run and log E-ACSL execution to $oexeclog.e-acsl"
-  $oexec.e-acsl > $oexeclog.e-acsl 2>&1
+  run_executable $oexec         $oexeclog.native "Native"
+  run_executable $oexec.e-acsl  $oexeclog.e-acsl "Instrumented"
 
   ## Make sure that instrumented and uninstrumented programs have same outputs
-  diff $oexeclog.native $oexeclog.e-acsl ||
-    error "Output of programs before and after instrumentation differ" \
-      "output of $oexec and $oexec.e-acsl"
+  debug "Compare outputs of $oexec and $oexec.e-acsl"
+  diff -ur -N $oexeclog.native $oexeclog.e-acsl > $oexeclog.diff 2>&1 || \
+    error "Output of instrumented and original programs differ" $oexeclog.diff
 
   RUNS=$((RUNS+1))
 }
 
+# Run GMP tests if specified
 run_test "$EXTRA"
 if test -n "$GMP"; then
   run_test "--gmp $EXTRA"