From 893d7524c73aa66552d92bd1bd1362c7f9d10ee2 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Fri, 24 Feb 2006 22:15:08 +0100 Subject: [PATCH] winedbg: Auto mode. - rewrite auto mode startup - move part of auto handling to tgt_active.c --- 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 91b4b70206d..38ad642c050 100644 --- a/programs/winedbg/debugger.h +++ b/programs/winedbg/debugger.h @@ -372,8 +372,9 @@ extern void dbg_run_debuggee(const char* args); 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 335ae5ccfa2..226227c348b 100644 --- a/programs/winedbg/tgt_active.c +++ b/programs/winedbg/tgt_active.c @@ -872,3 +872,15 @@ enum dbg_start dbg_active_launch(int argc, char* argv[]) dbg_last_cmd_line = cmd_line; return start_ok; } + +/****************************************************************** + * dbg_active_auto + * + * Starts ( or ) 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 1978d37aec4..e8678c4d8cb 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; + 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) + { + 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; } - 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")) - { - argc--; argv++; - hFile = CreateFileA(argv[0], GENERIC_READ|DELETE, 0, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (hFile == INVALID_HANDLE_VALUE) + 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; + return dbg_winedbg_usage(); } - 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(); + 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; } -- 2.11.4.GIT