Skip to content
Snippets Groups Projects
Commit b5e9c1fa authored by Daniel Salzman's avatar Daniel Salzman
Browse files

func-tests: add gdb backtrace dumping

parent 89fa8efb
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,15 @@ dnssec-signzone
dnssec-verify
Bind 9.9
lsof
(gdb)
Ubuntu - disable apparmor protection for system Bind:
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.named
\ No newline at end of file
Ubuntu:
-------
Disable apparmor protection for system Bind:
# sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.named
Allow ptrace:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
or
/etc/sysctl.d/10-ptrace.conf
kernel.yama.ptrace_scope = 0
......@@ -34,7 +34,12 @@ debug = False
# KNOT_TEST_VALGRIND - valgrind binary if defined.
valgrind_bin = get_binary("KNOT_TEST_VALGRIND", "valgrind")
# KNOT_TEST_VALGRIND_FLAGS - valgrind flags.
valgrind_flags = get_param("KNOT_TEST_VALGRIND_FLAGS", "--leak-check=full")
valgrind_flags = get_param("KNOT_TEST_VALGRIND_FLAGS",
"--leak-check=full --vgdb=yes")
# KNOT_TEST_GDB - gdb binary.
gdb_bin = get_binary("KNOT_TEST_GDB", "gdb")
# KNOT_TEST_VGDB - vgdb binary.
vgdb_bin = get_binary("KNOT_TEST_VGDB", "vgdb")
# KNOT_TEST_KNOT - Knot binary.
knot_bin = get_binary("KNOT_TEST_KNOT", "../src/knotd")
# KNOT_TEST_KNOTC - Knot control binary.
......
......@@ -295,6 +295,24 @@ class Server(object):
detail_log(SEP)
f.close()
def backtrace(self):
if self.valgrind:
check_log("BACKTRACE %s" % self.name)
try:
out = open(self.dir + "/gdb.out", mode="a")
err = open(self.dir + "/gdb.err", mode="a")
check_call([params.gdb_bin, "-ex", "set confirm off", "-ex",
"target remote | %s --pid=%s" %
(params.vgdb_bin, self.proc.pid),
"-ex", "bt full", "-ex", "q", self.daemon_bin],
stdout=out, stderr=err)
except:
detail_log("!Failed to get backtrace")
detail_log(SEP)
def stop(self, check=True):
if self.proc:
try:
......@@ -303,6 +321,7 @@ class Server(object):
except ProcessLookupError:
pass
except:
self.backtrace()
check_log("WARNING: KILLING %s" % self.name)
detail_log(SEP)
self.proc.kill()
......@@ -486,6 +505,7 @@ class Server(object):
break
time.sleep(2)
else:
self.backtrace()
raise Exception("Can't get %s SOA%s from %s." % (zone.name,
">%i" % serial if serial else "", self.name))
......
......@@ -105,7 +105,7 @@ class Test(object):
if params.valgrind_bin and \
(valgrind or (valgrind == None and server == "knot")):
srv.valgrind = [params.valgrind_bin, params.valgrind_flags]
srv.valgrind = [params.valgrind_bin] + params.valgrind_flags.split()
srv.data_dir = self.data_dir
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment