Log to +seh when an IsBad* function faults

Mike Hearn mike at navi.cx
Tue Mar 22 12:16:17 CST 2005


I wasted far too much time investigating these "crashes",
so let's make it clearer when these functions fault.

ChangeLog:
Log to +seh when an IsBad* function faults

--- dlls/kernel/virtual.c  (revision 153)
+++ dlls/kernel/virtual.c  (local)
@@ -44,6 +44,7 @@
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(virtual);
+WINE_DECLARE_DEBUG_CHANNEL(seh);
 
 static unsigned int page_size;
 
@@ -541,7 +542,11 @@ BOOL WINAPI IsBadReadPtr(
         dummy = p[0];
         dummy = p[count - 1];
     }
-    __EXCEPT(page_fault) { return TRUE; }
+    __EXCEPT(page_fault)
+    {
+        TRACE_(seh)("%p caused page fault during read\n", ptr);
+        return TRUE;
+    }
     __ENDTRY
     return FALSE;
 }
@@ -574,7 +579,11 @@ BOOL WINAPI IsBadWritePtr(
         p[0] |= 0;
         p[count - 1] |= 0;
     }
-    __EXCEPT(page_fault) { return TRUE; }
+    __EXCEPT(page_fault)
+    {
+        TRACE_(seh)("%p caused page fault during write\n", ptr);
+        return TRUE;
+    }
     __ENDTRY
     return FALSE;
 }
@@ -637,7 +646,11 @@ BOOL WINAPI IsBadStringPtrA(
         volatile const char *p = str;
         while (p != str + max) if (!*p++) break;
     }
-    __EXCEPT(page_fault) { return TRUE; }
+    __EXCEPT(page_fault)
+    {
+        TRACE_(seh)("%p caused page fault during read\n", str);
+        return TRUE;
+    }
     __ENDTRY
     return FALSE;
 }
@@ -654,7 +667,11 @@ BOOL WINAPI IsBadStringPtrW( LPCWSTR str
         volatile const WCHAR *p = str;
         while (p != str + max) if (!*p++) break;
     }
-    __EXCEPT(page_fault) { return TRUE; }
+    __EXCEPT(page_fault)
+    {
+        TRACE_(seh)("%p caused page fault during read\n", str);
+        return TRUE;
+    }
     __ENDTRY
     return FALSE;
 }



More information about the wine-patches mailing list