From 05c13e50d35c340f75b8823823c980342e11fe20 Mon Sep 17 00:00:00 2001 From: Michal Nowak Date: Mon, 22 Jun 2020 15:56:50 +0200 Subject: [PATCH] Rationalize backtrace logging GDB backtrace generated via "thread apply all bt full" is too long for standard output, lets save them to .txt file among other log files. --- bin/tests/system/run.sh.in | 39 +++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/bin/tests/system/run.sh.in b/bin/tests/system/run.sh.in index bba48e4952..f927bed6d5 100644 --- a/bin/tests/system/run.sh.in +++ b/bin/tests/system/run.sh.in @@ -246,11 +246,15 @@ else exit $status fi +get_core_dumps() { + find "$systest/" \( -name 'core*' -or -name '*.core' \) ! -name '*.gz' ! -name '*.txt' | sort +} + if [ $status != 0 ]; then echofail "R:$systest:FAIL" # Do not clean up - we need the evidence. else - core_dumps="$(find "$systest/" -name 'core*' -or -name '*.core' | sort | tr '\n' ' ')" + core_dumps=$(get_core_dumps | tr '\n' ' ') assertion_failures=$(find "$systest/" -name named.run -print0 | xargs -0 grep "assertion failure" | wc -l) sanitizer_summaries=$(find "$systest/" -name 'tsan.*' | wc -l) if [ -n "$core_dumps" ]; then @@ -258,17 +262,28 @@ else echoinfo "I:$systest:Test claims success despite crashes: $core_dumps" echofail "R:$systest:FAIL" # Do not clean up - we need the evidence. - find "$systest/" -name 'core*' -or -name '*.core' | while read -r coredump; do + get_core_dumps | while read -r coredump; do export SYSTESTDIR="$systest" - echoinfo "D:$systest:backtrace from $coredump start" - binary=$(gdb --batch --core="$coredump" | sed -ne "s/Core was generated by \`//;s/ .*'.$//p;") + echoinfo "D:$systest:backtrace from $coredump:" + echoinfo "D:$systest:--------------------------------------------------------------------------------" + binary=$(gdb --batch --core="$coredump" 2>/dev/null | sed -ne "s/Core was generated by \`//;s/ .*'.$//p;") + "${top_builddir}/libtool" --mode=execute gdb \ + -batch \ + -ex bt \ + -core="$coredump" \ + -- \ + "$binary" 2>/dev/null | sed -n '/^Core was generated by/,$p' | cat_d + echoinfo "D:$systest:--------------------------------------------------------------------------------" + coredump_backtrace=$(basename "${coredump}")-backtrace.txt + echoinfo "D:$systest:full backtrace from $coredump saved in $coredump_backtrace" "${top_builddir}/libtool" --mode=execute gdb \ - --batch \ - --command=run.gdb \ - --core="$coredump" \ + -batch \ + -command=run.gdb \ + -core="$coredump" \ -- \ - "$binary" - echoinfo "D:$systest:backtrace from $coredump end" + "$binary" > "$coredump_backtrace" 2>&1 + echoinfo "D:$systest:core dump $coredump archived as $coredump.gz" + gzip -1 "${coredump}" done elif [ "$assertion_failures" -ne 0 ]; then status=1 @@ -283,14 +298,12 @@ else echofail "R:$systest:FAIL" else echopass "R:$systest:PASS" - if $clean - then + if $clean; then ( cd "${systest}" && $SHELL clean.sh "$@" ) if [ "${srcdir}" != "${builddir}" ]; then rm -rf "./${systest}" ## FIXME (this also removes compiled binaries) fi - if test -d ${srcdir}/../../../.git - then + if test -d ${srcdir}/../../../.git; then git status -su --ignored "${systest}" 2>/dev/null | \ sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \ -e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \ -- GitLab