summaryrefslogtreecommitdiffstats
path: root/src/retrace/retrace.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/retrace/retrace.py')
-rw-r--r--src/retrace/retrace.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/retrace/retrace.py b/src/retrace/retrace.py
index cc67f62f..ddeb9ffd 100644
--- a/src/retrace/retrace.py
+++ b/src/retrace/retrace.py
@@ -121,6 +121,39 @@ def guess_release(package):
return None, None
+def run_gdb(savedir):
+ try:
+ exec_file = open("%s/crash/executable" % savedir, "r")
+ executable = exec_file.read().replace("'", "")
+ exec_file.close()
+ except:
+ return ""
+
+ mockr = "../../%s/mock" % savedir
+
+ chmod = Popen(["mock", "shell", "-r", mockr, "--",
+ "/bin/chmod", "777", executable])
+ if chmod.wait() != 0:
+ return ""
+
+ pipe = Popen(["mock", "shell", "-r", mockr, "--",
+ "gdb", "-batch",
+ "-ex", "'file %s'" % executable,
+ "-ex", "'core-file /var/spool/abrt/crash/coredump'",
+ "-ex", "'thread apply all backtrace 2048 full'",
+ "-ex", "'info sharedlib'",
+ "-ex", "'print (char*)__abort_msg'",
+ "-ex", "'print (char*)__glib_assert_msg'",
+ "-ex", "'info registers'",
+ "-ex", "'disassemble'",
+ # redirect GDB's stderr, ignore mock's stderr
+ "2>&1"], stdout=PIPE).stdout
+
+ backtrace = pipe.read()
+ pipe.close()
+
+ return backtrace
+
def gen_task_password(taskdir):
generator = random.SystemRandom()
taskpass = ""