[PATCH] kernel32: Don't clear WINEDEBUG in the debugger process if +winedbg is set.

Zebediah Figura z.figura12 at gmail.com
Wed Aug 15 20:34:00 CDT 2018


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
This provides a way to debug winedbg.exe itself, which is otherwise
practically impossible.

Inspired by bug 45369.

 dlls/kernel32/except.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/dlls/kernel32/except.c b/dlls/kernel32/except.c
index bff8ce2..98f0d9f 100644
--- a/dlls/kernel32/except.c
+++ b/dlls/kernel32/except.c
@@ -54,6 +54,7 @@
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(seh);
+WINE_DECLARE_DEBUG_CHANNEL(winedbg);
 
 static PTOP_LEVEL_EXCEPTION_FILTER top_filter;
 
@@ -289,15 +290,18 @@ static BOOL	start_debugger(PEXCEPTION_POINTERS epointers, HANDLE hEvent)
 
     /* make WINEDEBUG empty in the environment */
     env = GetEnvironmentStringsA();
-    for (p = env; *p; p += strlen(p) + 1)
+    if (!TRACE_ON(winedbg))
     {
-        if (!memcmp( p, "WINEDEBUG=", sizeof("WINEDEBUG=")-1 ))
+        for (p = env; *p; p += strlen(p) + 1)
         {
-            char *next = p + strlen(p);
-            char *end = next + 1;
-            while (*end) end += strlen(end) + 1;
-            memmove( p + sizeof("WINEDEBUG=") - 1, next, end + 1 - next );
-            break;
+            if (!memcmp( p, "WINEDEBUG=", sizeof("WINEDEBUG=")-1 ))
+            {
+                char *next = p + strlen(p);
+                char *end = next + 1;
+                while (*end) end += strlen(end) + 1;
+                memmove( p + sizeof("WINEDEBUG=") - 1, next, end + 1 - next );
+                break;
+            }
         }
     }
 
-- 
2.7.4




More information about the wine-devel mailing list