Module: wine Branch: refs/heads/master Commit: 893d7524c73aa66552d92bd1bd1362c7f9d10ee2 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=893d7524c73aa66552d92bd1...
Author: Eric Pouech eric.pouech@wanadoo.fr Date: Fri Feb 24 22:15:08 2006 +0100
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 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; }