[PATCH 05/12] [WineDbg]: auto mode
Eric Pouech
eric.pouech at wanadoo.fr
Fri Feb 24 15:15:08 CST 2006
- rewrite auto mode startup
- move part of auto handling to tgt_active.c
A+
---
programs/winedbg/debugger.h | 3 +
programs/winedbg/tgt_active.c | 12 ++++
programs/winedbg/winedbg.c | 116 +++++++++++++++++++++--------------------
3 files changed, 74 insertions(+), 57 deletions(-)
diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h
index 91b4b70..38ad642 100644
--- a/programs/winedbg/debugger.h
+++ b/programs/winedbg/debugger.h
@@ -372,8 +372,9 @@ extern void dbg_run_debuggee
extern void dbg_wait_next_exception(DWORD cont, int count, int mode);
extern enum dbg_start dbg_active_attach(int argc, char* argv[]);
extern enum dbg_start dbg_active_launch(int argc, char* argv[]);
+extern enum dbg_start dbg_active_auto(int argc, char* argv[]);
/* temporary for tgt_active.c */
-extern enum dbg_action_mode {none_mode = 0, winedbg_mode, automatic_mode} dbg_action_mode;
+extern enum dbg_action_mode {winedbg_mode, automatic_mode} dbg_action_mode;
extern unsigned dbg_main_loop(HANDLE);
/* tgt_minidump.c */
diff --git a/programs/winedbg/tgt_active.c b/programs/winedbg/tgt_active.c
index 335ae5c..226227c 100644
--- a/programs/winedbg/tgt_active.c
+++ b/programs/winedbg/tgt_active.c
@@ -872,3 +872,15 @@ enum dbg_start dbg_active_launch(int
dbg_last_cmd_line = cmd_line;
return start_ok;
}
+
+/******************************************************************
+ * dbg_active_auto
+ *
+ * Starts (<pid> or <pid> <evt>) in automatic mode
+ */
+enum dbg_start dbg_active_auto(int argc, char* argv[])
+{
+ argc--; argv++;
+ dbg_action_mode = automatic_mode;
+ return dbg_active_attach(argc, argv);
+}
diff --git a/programs/winedbg/winedbg.c b/programs/winedbg/winedbg.c
index 1978d37..e8678c4 100644
--- a/programs/winedbg/winedbg.c
+++ b/programs/winedbg/winedbg.c
@@ -462,8 +462,9 @@ extern struct backend_cpu be_alpha;
int main(int argc, char** argv)
{
- int retv = 0;
- HANDLE hFile = INVALID_HANDLE_VALUE;
+ int retv = 0;
+ HANDLE hFile = INVALID_HANDLE_VALUE;
+ enum dbg_start ds;
#ifdef __i386__
be_cpu = &be_i386;
@@ -489,71 +490,74 @@ int main(int argc, char** argv)
if (retv == -1) dbg_winedbg_usage();
return retv;
}
+ dbg_init_console();
+ dbg_action_mode = winedbg_mode;
- /* parse options */
- while (argc > 0 && argv[0][0] == '-')
+ SymSetOptions((SymGetOptions() & ~(SYMOPT_UNDNAME)) |
+ SYMOPT_LOAD_LINES | SYMOPT_DEFERRED_LOADS | SYMOPT_AUTO_PUBLICS);
+
+ if (argc && !strcmp(argv[0], "--auto"))
+ {
+ /* force some internal variables */
+ DBG_IVAR(BreakOnDllLoad) = 0;
+ dbg_houtput = GetStdHandle(STD_ERROR_HANDLE);
+ ds = dbg_active_auto(argc, argv);
+ }
+ else
{
- if (!strcmp(argv[0], "--command"))
+ /* parse options */
+ while (argc > 0 && argv[0][0] == '-')
{
- char path[MAX_PATH], file[MAX_PATH];
- DWORD w;
-
- GetTempPath(sizeof(path), path);
- GetTempFileName(path, "WD", 0, file);
- argc--; argv++;
- hFile = CreateFileA(file, GENERIC_READ|GENERIC_WRITE|DELETE, FILE_SHARE_DELETE,
- NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
- if (hFile == INVALID_HANDLE_VALUE)
+ if (!strcmp(argv[0], "--command"))
{
- dbg_printf("Couldn't open temp file %s (%lu)\n", file, GetLastError());
- return 1;
- }
- WriteFile(hFile, argv[0], strlen(argv[0]), &w, 0);
- WriteFile(hFile, "\nquit\n", 6, &w, 0);
- SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
+ char path[MAX_PATH], file[MAX_PATH];
+ DWORD w;
- argc--; argv++;
- continue;
- }
- if (!strcmp(argv[0], "--file"))
- {
- argc--; argv++;
- hFile = CreateFileA(argv[0], GENERIC_READ|DELETE, 0,
- NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- if (hFile == INVALID_HANDLE_VALUE)
+ GetTempPath(sizeof(path), path);
+ GetTempFileName(path, "WD", 0, file);
+ argc--; argv++;
+ hFile = CreateFileA(file, GENERIC_READ|GENERIC_WRITE|DELETE, FILE_SHARE_DELETE,
+ NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0);
+ if (hFile == INVALID_HANDLE_VALUE)
+ {
+ dbg_printf("Couldn't open temp file %s (%lu)\n", file, GetLastError());
+ return 1;
+ }
+ WriteFile(hFile, argv[0], strlen(argv[0]), &w, 0);
+ WriteFile(hFile, "\nquit\n", 6, &w, 0);
+ SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
+
+ argc--; argv++;
+ continue;
+ }
+ if (!strcmp(argv[0], "--file"))
{
- dbg_printf("Couldn't open file %s (%lu)\n", argv[0], GetLastError());
- return 1;
+ argc--; argv++;
+ hFile = CreateFileA(argv[0], GENERIC_READ|DELETE, 0,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (hFile == INVALID_HANDLE_VALUE)
+ {
+ dbg_printf("Couldn't open file %s (%lu)\n", argv[0], GetLastError());
+ return 1;
+ }
+ argc--; argv++;
+ continue;
}
- argc--; argv++;
- continue;
- }
- if (!strcmp(argv[0], "--auto"))
- {
- if (dbg_action_mode != none_mode) return dbg_winedbg_usage();
- dbg_action_mode = automatic_mode;
- /* force some internal variables */
- DBG_IVAR(BreakOnDllLoad) = 0;
- argc--; argv++;
- dbg_houtput = GetStdHandle(STD_ERROR_HANDLE);
- continue;
+ return dbg_winedbg_usage();
}
- return dbg_winedbg_usage();
+ if (!argc) ds = start_ok;
+ else if ((ds = dbg_active_attach(argc, argv)) == start_error_parse)
+ ds = dbg_active_launch(argc, argv);
}
-
- if (dbg_action_mode == none_mode) dbg_action_mode = winedbg_mode;
- if (!argc || dbg_active_attach(argc, argv) == start_ok ||
- dbg_active_launch(argc, argv) == start_ok)
+ switch (ds)
{
- dbg_init_console();
-
- SymSetOptions((SymGetOptions() & ~(SYMOPT_UNDNAME)) |
- SYMOPT_LOAD_LINES | SYMOPT_DEFERRED_LOADS | SYMOPT_AUTO_PUBLICS);
-
- retv = dbg_main_loop(hFile);
- /* don't save modified variables in auto mode */
- if (dbg_action_mode != automatic_mode) dbg_save_internal_vars();
+ case start_ok: break;
+ case start_error_parse: return dbg_winedbg_usage();
+ case start_error_init: return -1;
}
+ retv = dbg_main_loop(hFile);
+ /* don't save modified variables in auto mode */
+ if (dbg_action_mode != automatic_mode) dbg_save_internal_vars();
return retv;
}
More information about the wine-patches
mailing list