In case when package debuginfo is present, gdb will output only
function names but no offsets preventing core backtrace generation.

Setting non-existent debuginfo directory resolves this.
---
 src/lib/hooklib.c                                 | 29 +++++++++++++++--------
 src/plugins/abrt-action-generate-core-backtrace.c |  2 +-
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/lib/hooklib.c b/src/lib/hooklib.c
index 1b30a5b..ca799e0 100644
--- a/src/lib/hooklib.c
+++ b/src/lib/hooklib.c
@@ -249,17 +249,26 @@ char *get_backtrace(const char *dump_dir_name, unsigned 
timeout_sec, const char
     // (https://bugzilla.redhat.com/show_bug.cgi?id=528668):
     args[2] = (char*)"-ex";
     struct strbuf *set_debug_file_directory = strbuf_new();
-    strbuf_append_str(set_debug_file_directory, "set debug-file-directory 
/usr/lib/debug");
-    const char *p = debuginfo_dirs;
-    while (1)
+    if(debuginfo_dirs == NULL)
     {
-        while (*p == ':')
-            p++;
-        if (*p == '\0')
-            break;
-        const char *colon_or_nul = strchrnul(p, ':');
-        strbuf_append_strf(set_debug_file_directory, ":%.*s/usr/lib/debug", 
(int)(colon_or_nul - p), p);
-        p = colon_or_nul;
+        // set non-existent debug file directory to prevent resolving
+        // function names - we need offsets for core backtrace.
+        strbuf_append_str(set_debug_file_directory, "set debug-file-directory 
/");
+    }
+    else
+    {
+        strbuf_append_str(set_debug_file_directory, "set debug-file-directory 
/usr/lib/debug");
+        const char *p = debuginfo_dirs;
+        while (1)
+        {
+            while (*p == ':')
+                p++;
+            if (*p == '\0')
+                break;
+            const char *colon_or_nul = strchrnul(p, ':');
+            strbuf_append_strf(set_debug_file_directory, 
":%.*s/usr/lib/debug", (int)(colon_or_nul - p), p);
+            p = colon_or_nul;
+        }
     }
     args[3] = strbuf_free_nobuf(set_debug_file_directory);
 
diff --git a/src/plugins/abrt-action-generate-core-backtrace.c 
b/src/plugins/abrt-action-generate-core-backtrace.c
index 5fccb89..9bd09a4 100644
--- a/src/plugins/abrt-action-generate-core-backtrace.c
+++ b/src/plugins/abrt-action-generate-core-backtrace.c
@@ -106,7 +106,7 @@ int main(int argc, char **argv)
     if (strcmp(analyzer, "CCpp") == 0)
     {
         VERB1 log("Querying gdb for backtrace");
-        char *gdb_out = get_backtrace(dump_dir_name, exec_timeout_sec, "");
+        char *gdb_out = get_backtrace(dump_dir_name, exec_timeout_sec, NULL);
         if (gdb_out == NULL)
             xfunc_die();
 
-- 
1.7.11.4

Reply via email to