dbghelp problem

Robert Reif reif at earthlink.net
Fri Mar 4 11:12:20 CST 2005


I can't get a stack trace with symbol information from an
exe file and tracked the problem down to this.

dbghelp tries to load the symbols for the executable file
by looking up the file name without the .exe extension and
fails because the file is not found.  This patch adds the
.exe back on to the file name and tries to look it up again
before failing.

I doubt this is the right solution but it works for me.
-------------- next part --------------
--- pe_module.c	2005-03-01 06:20:19.000000000 -0500
+++ /mnt/floppy/pe_module.c	2005-03-04 11:06:30.000000000 -0500
@@ -332,6 +332,7 @@
     HANDLE              hMap;
     void*               mapping;
     char                loaded_name[MAX_PATH];
+    TRACE("(%p %s %p %08lx %08lx)\n", pcs, name, hFile, base, size);
 
     loaded_name[0] = '\0';
     if (!hFile)
@@ -341,13 +342,22 @@
             /* FIXME SetLastError */
             return NULL;
         }
-        if ((hFile = FindExecutableImage(name, NULL, loaded_name)) == NULL)
-            return NULL;
+        if ((hFile = FindExecutableImage(name, NULL, loaded_name)) == NULL) {
+	    char full_name[MAX_PATH];
+	    TRACE("file: %s not found\n", name);
+	    strcpy(full_name, name);
+	    strcat(full_name, ".exe");
+            if ((hFile = FindExecutableImage(full_name, NULL, loaded_name)) == NULL) {
+	        TRACE("file: %s not found\n", full_name);
+		return NULL;
+	    }
+        }
         opened = TRUE;
     }
     else if (name) strcpy(loaded_name, name);
     else if (dbghelp_options & SYMOPT_DEFERRED_LOADS)
         FIXME("Trouble ahead (no module name passed in deferred mode)\n");
+    TRACE("loaded_name = %s\n", loaded_name);
     if (!(module = module_find_by_name(pcs, loaded_name, DMT_PE)) &&
         (hMap = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL)) != NULL)
     {


More information about the wine-devel mailing list