[CRIU] [PATCH] [v2] travis: catch core dump files in error cases
Andrei Vagin
avagin at openvz.org
Wed Aug 24 13:09:27 PDT 2016
From: Andrei Vagin <avagin at virtuozzo.com>
It is very hard to investigate travis fails, when something is segfaulted.
Let's add our own core file handler which will provide all required
information for us. Now test/abrt.sh shows a process tree,
process mappings, registers and backtraces.
v2: change a variable name
Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
---
scripts/travis/travis-tests | 7 ++++++-
test/abrt.sh | 30 ++++++++++++++++++++++++++++++
test/zdtm.py | 22 ++++++++++++++++++++++
3 files changed, 58 insertions(+), 1 deletion(-)
create mode 100755 test/abrt.sh
diff --git a/scripts/travis/travis-tests b/scripts/travis/travis-tests
index fb569ac..4565972 100755
--- a/scripts/travis/travis-tests
+++ b/scripts/travis/travis-tests
@@ -1,12 +1,17 @@
#!/bin/sh
set -x -e
+ulimit -c unlimited
+
cd ../../
+service apport stop
+echo "|`pwd`/test/abrt.sh %P %p %s %e" > /proc/sys/kernel/core_pattern
+
apt-get update -qq
apt-get install -qq protobuf-c-compiler libprotobuf-c0-dev libaio-dev \
libprotobuf-dev protobuf-compiler python-ipaddr libcap-dev \
- libnl-3-dev gcc-multilib libc6-dev-i386
+ libnl-3-dev gcc-multilib libc6-dev-i386 gdb bash
chmod a+x $HOME
export GCOV=1
make
diff --git a/test/abrt.sh b/test/abrt.sh
new file mode 100755
index 0000000..34f25b4
--- /dev/null
+++ b/test/abrt.sh
@@ -0,0 +1,30 @@
+#!/bin/bash -x
+
+pid=$1
+vpid=$2
+sig=$3
+comm=$4
+
+exec &>> /tmp/zdtm-core.log
+
+expr match "$comm" zombie00 && {
+ cat > /dev/null
+ exit 0
+}
+
+report="/tmp/zdtm-core-$pid-$comm"
+exec &> ${report}.txt
+
+ps axf
+ps -p $pid
+
+cat /proc/$pid/status
+ls -l /proc/$pid/fd
+cat /proc/$pid/maps
+exec 33< /proc/$pid/exe
+cat > $report.core
+
+echo 'bt
+i r
+disassemble $rip-0x10,$rip + 0x10
+' | gdb -c $report.core /proc/self/fd/33
diff --git a/test/zdtm.py b/test/zdtm.py
index 4f747ca..abcd5ed 100755
--- a/test/zdtm.py
+++ b/test/zdtm.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python2
# vim: noet
import argparse
+import glob
import os
import subprocess
import time
@@ -102,6 +103,25 @@ def add_to_output(path):
fdo.write(buf)
+prev_crash_reports = set(glob.glob("/tmp/zdtm-core-*.txt"))
+
+
+def check_core_files():
+ reports = set(glob.glob("/tmp/zdtm-core-*.txt")) - prev_crash_reports
+ if not reports:
+ return False
+
+ while subprocess.Popen("ps axf | grep 'abrt\.sh'", shell = True).wait() == 0:
+ time.sleep(1)
+
+ for i in reports:
+ add_to_report(i, os.path.basename(i))
+ print_sep(i)
+ print open(i).read()
+ print_sep(i)
+
+ return True
+
# Arch we run on
arch = os.uname()[4]
@@ -1326,6 +1346,8 @@ class launcher:
def finish(self):
self.__wait_all()
+ if not opts['fault'] and check_core_files():
+ self.__fail = True
if self.__file_report:
self.__file_report.close()
if self.__fail:
--
2.7.4
More information about the CRIU
mailing list