From: Eric Pouech Subject: [PATCH 1/1] programs/winedbg: no longer hide current WineDbg process from 'info proc' Message-Id: Date: Wed, 29 Jun 2022 11:11:59 +0000 In-Reply-To: References: From: Eric Pouech We used to hide current WineDbg instance when displaying processes' list (command 'info proc'). This can potentially generate some "dangling" processes in the hierarchy (related to this WineDbg instance): - conhost.exe - start.exe (when launched from unix shell without full path to winedbg.exe) Also, print a more comprehensive error message when trying to attach to itself (now that debugger's PID is more easily available). Signed-off-by: Eric Pouech --- programs/winedbg/info.c | 17 ++++++++++------- programs/winedbg/tgt_active.c | 7 ++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/programs/winedbg/info.c b/programs/winedbg/info.c index bb933aeb455..ae0fd90e938 100644 --- a/programs/winedbg/info.c +++ b/programs/winedbg/info.c @@ -498,14 +498,18 @@ static unsigned get_parent(const struct dump_proc* dp, unsigned idx) static void dump_proc_info(const struct dump_proc* dp, unsigned idx, unsigned depth) { struct dump_proc_entry* dpe; + char info; for ( ; idx != -1; idx = dp->entries[idx].sibling) { assert(idx < dp->count); dpe = &dp->entries[idx]; - dbg_printf("%c%08lx %-8ld ", - (dpe->proc.th32ProcessID == (dbg_curr_process ? - dbg_curr_process->pid : 0)) ? '>' : ' ', - dpe->proc.th32ProcessID, dpe->proc.cntThreads); + if (dbg_curr_process && dpe->proc.th32ProcessID == dbg_curr_process->pid) + info = '>'; + else if (dpe->proc.th32ProcessID == GetCurrentProcessId()) + info = '='; + else + info = ' '; + dbg_printf("%c%08lx %-8ld ", info, dpe->proc.th32ProcessID, dpe->proc.cntThreads); if (depth) { unsigned i; @@ -537,11 +541,10 @@ void info_win32_processes(void) dp.entries[dp.count].proc.dwSize = sizeof(dp.entries[dp.count].proc); ok = Process32First(snap, &dp.entries[dp.count].proc); - /* fetch all process information into dp (skipping this debugger) */ + /* fetch all process information into dp */ while (ok) { - if (dp.entries[dp.count].proc.th32ProcessID != GetCurrentProcessId()) - dp.entries[dp.count++].children = -1; + dp.entries[dp.count++].children = -1; if (dp.count >= dp.alloc) { dp.entries = HeapReAlloc(GetProcessHeap(), 0, dp.entries, sizeof(*dp.entries) * (dp.alloc *= 2)); diff --git a/programs/winedbg/tgt_active.c b/programs/winedbg/tgt_active.c index c17a6f38290..734c306a3e7 100644 --- a/programs/winedbg/tgt_active.c +++ b/programs/winedbg/tgt_active.c @@ -70,9 +70,14 @@ static unsigned dbg_handle_debug_event(DEBUG_EVENT* de); */ BOOL dbg_attach_debuggee(DWORD pid) { + if (pid == GetCurrentProcessId()) + { + dbg_printf("WineDbg can't debug its own process. Please, use another process ID.\n"); + return FALSE; + } if (!(dbg_curr_process = dbg_add_process(&be_process_active_io, pid, 0))) return FALSE; - if (!DebugActiveProcess(pid)) + if (!DebugActiveProcess(pid)) { dbg_printf("Can't attach process %04lx: error %lu\n", pid, GetLastError()); dbg_del_process(dbg_curr_process); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/339