[PATCH 1/1] programs/winedbg: no longer hide current WineDbg process from 'info proc'

Eric Pouech wine at gitlab.winehq.org
Wed Jun 29 06:11:59 CDT 2022


From: Eric Pouech <eric.pouech at gmail.com>

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 <eric.pouech at gmail.com>
---
 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



More information about the wine-devel mailing list