From: Eric Pouech Subject: [PATCH v2 1/1] winedbg: No longer hide current WineDbg process from 'info proc'. Message-Id: Date: Wed, 29 Jun 2022 21:24:57 +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 Signed-off-by: Alexandre Julliard --- 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..9e11de69bc9 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