diff options
Diffstat (limited to 'src/retrace/retrace.py')
-rw-r--r-- | src/retrace/retrace.py | 33 |
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 = "" |