Added "--auto" option.
diff --git a/debugger/winedbg.c b/debugger/winedbg.c
index 2c7b228..74104fb 100644
--- a/debugger/winedbg.c
+++ b/debugger/winedbg.c
@@ -33,6 +33,7 @@
static char* DEBUG_LastCmdLine = NULL;
static DBG_PROCESS* DEBUG_ProcessList = NULL;
+static int automatic_mode;
DBG_INTVAR DEBUG_IntVars[DBG_IV_LAST];
void DEBUG_Output(int chn, const char* buffer, int len)
@@ -519,6 +520,12 @@
DEBUG_CurrThread->dbg_exec_mode, DEBUG_CurrThread->dbg_exec_count);
#endif
+ if (automatic_mode)
+ {
+ DEBUG_ExceptionProlog(is_debug, FALSE, rec->ExceptionCode);
+ return FALSE; /* terminate execution */
+ }
+
if (DEBUG_ExceptionProlog(is_debug, force, rec->ExceptionCode)) {
DEBUG_interactiveP = TRUE;
while ((ret = DEBUG_Parser())) {
@@ -822,6 +829,29 @@
return 0;
}
+static DWORD DEBUG_AutoMode(void)
+{
+ DEBUG_EVENT de;
+ DWORD cont;
+ BOOL ret = TRUE;
+
+ DEBUG_Printf(DBG_CHN_MESG, " on pid %lx\n", DEBUG_CurrPid);
+
+ while (ret && DEBUG_ProcessList && WaitForDebugEvent(&de, INFINITE))
+ {
+ ret = DEBUG_HandleDebugEvent(&de, &cont);
+ ContinueDebugEvent(de.dwProcessId, de.dwThreadId, cont);
+ }
+ /* print some extra information */
+ DEBUG_Printf(DBG_CHN_MESG, "Modules:\n");
+ DEBUG_WalkModules();
+ DEBUG_Printf(DBG_CHN_MESG, "Threads:\n");
+ DEBUG_WalkThreads();
+
+ DEBUG_Printf(DBG_CHN_MESG, "WineDbg terminated on pid %lx\n", DEBUG_CurrPid);
+ return 0;
+}
+
static BOOL DEBUG_Start(LPSTR cmdLine)
{
PROCESS_INFORMATION info;
@@ -875,6 +905,18 @@
/* Initialize internal vars (types must have been initialized before) */
if (!DEBUG_IntVarsRW(TRUE)) return -1;
+ if (argc > 1 && !strcmp( argv[1], "--auto" ))
+ {
+ argc--;
+ argv++;
+ automatic_mode = 1;
+ /* force some internal variables */
+ DBG_IVAR(UseXTerm) = 0;
+ DBG_IVAR(BreakOnDllLoad) = 0;
+ DBG_IVAR(ConChannelMask) = 0;
+ DBG_IVAR(StdChannelMask) = DBG_CHN_MESG;
+ }
+
/* keep it as a guiexe for now, so that Wine won't touch the Unix stdin,
* stdout and stderr streams
*/
@@ -930,10 +972,17 @@
DEBUG_LastCmdLine = cmdLine;
}
- retv = DEBUG_MainLoop();
-
- /* saves modified variables */
- DEBUG_IntVarsRW(FALSE);
+ if (automatic_mode)
+ {
+ retv = DEBUG_AutoMode();
+ /* don't save modified variables in auto mode */
+ }
+ else
+ {
+ retv = DEBUG_MainLoop();
+ /* saves modified variables */
+ DEBUG_IntVarsRW(FALSE);
+ }
leave:
return retv;