As Uwe Bonnes noted, since the '--' handling removal when a process was created with CreateProcess (and not the command line), any debugger (like winedbg) started by an unhandled exception (aka JIT debugger), now inherits all the trace options from its parent (read the process which issued the exception) this patch lets you turn off this inheritance by adding a value under the HKLM\Software\Microsoft\Windows NT\CurrentVersion\AeDebug key if the value MuteDbgChannels is found and is TRUE then the debugger will be started will all the debug channels turned off A+
Name: dbg_nochn ChangeLog: added option to mute all debug channels in debugger when started by an exception License: X11 GenDate: 2002/05/10 20:57:15 UTC ModifiedFiles: win32/except.c AddedFiles: =================================================================== RCS file: /home/cvs/cvsroot/wine/wine/win32/except.c,v retrieving revision 1.52 diff -u -u -r1.52 except.c --- win32/except.c 10 Mar 2002 00:18:37 -0000 1.52 +++ win32/except.c 25 Apr 2002 19:56:05 -0000 @@ -208,7 +208,7 @@ static BOOL start_debugger(PEXCEPTION_POINTERS epointers, HANDLE hEvent) { HKEY hDbgConf; - DWORD bAuto = FALSE; + DWORD bAuto = FALSE, bMuteDbgChn = FALSE; PROCESS_INFORMATION info; STARTUPINFOA startup; char* cmdline = NULL; @@ -249,10 +249,21 @@ if (!RegQueryValueExA(hDbgConf, "Auto", 0, &type, autostr, &count)) bAuto = atoi(autostr); } + count = sizeof(bAuto); + /* this is a wine specific flag */ + if (RegQueryValueExA(hDbgConf, "MuteDebugChannels", 0, &type, (char*)&bMuteDbgChn, &count)) + bMuteDbgChn = TRUE; + else if (type == REG_SZ) + { + char mutestr[10]; + count = sizeof(mutestr); + if (!RegQueryValueExA(hDbgConf, "MuteDebugChannels", 0, &type, mutestr, &count)) + bMuteDbgChn = atoi(mutestr); + } RegCloseKey(hDbgConf); } else { /* try a default setup... */ - strcpy( format, "winedbg --debugmsg -all -- --auto %ld %ld" ); + strcpy( format, "winedbg --auto %ld %ld" ); } if (!bAuto) @@ -274,6 +285,19 @@ } if (format) { + if (bMuteDbgChn) + { + char buffer[1024]; + + if (GetEnvironmentVariableA( "WINEOPTIONS", buffer, sizeof(buffer) ) && buffer[0]) + { + strncat( buffer, " --debugmsg -all", sizeof(buffer) ); + } + else + strcpy( buffer, "--debugmsg -all" ); + SetEnvironmentVariableA( "WINEOPTIONS", buffer ); + } + TRACE("Starting debugger (fmt=%s)\n", format); cmdline=HeapAlloc(GetProcessHeap(), 0, format_size+2*20); sprintf(cmdline, format, GetCurrentProcessId(), hEvent);