[PATCH] [WineDbg]: in "info threads" commands, also show the name of the processes even if not debugged
Eric Pouech
eric.pouech at orange.fr
Wed Dec 30 02:43:38 CST 2009
A+
---
programs/winedbg/info.c | 30 +++++++++++++++++++++++++++---
1 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/programs/winedbg/info.c b/programs/winedbg/info.c
index 2afdf75..e501f43 100644
--- a/programs/winedbg/info.c
+++ b/programs/winedbg/info.c
@@ -475,6 +475,22 @@ void info_win32_processes(void)
}
}
+static BOOL get_process_name(DWORD pid, PROCESSENTRY32* entry)
+{
+ BOOL ret = FALSE;
+ HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+
+ if (snap != INVALID_HANDLE_VALUE)
+ {
+ entry->dwSize = sizeof(*entry);
+ if (Process32First(snap, entry))
+ while (!(ret = (entry->th32ProcessID == pid)) &&
+ Process32Next(snap, entry));
+ CloseHandle(snap);
+ }
+ return ret;
+}
+
void info_win32_threads(void)
{
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
@@ -500,11 +516,19 @@ void info_win32_threads(void)
if (entry.th32OwnerProcessID != lastProcessId)
{
struct dbg_process* p = dbg_get_process(entry.th32OwnerProcessID);
+ PROCESSENTRY32 pcs_entry;
+ const char* exename;
+
+ if (p)
+ exename = dbg_W2A(p->imageName, -1);
+ else if (get_process_name(entry.th32OwnerProcessID, &pcs_entry))
+ exename = pcs_entry.szExeFile;
+ else
+ exename = "";
dbg_printf("%08x%s %s\n",
- entry.th32OwnerProcessID, p ? " (D)" : "",
- p ? dbg_W2A(p->imageName, -1) : "");
- lastProcessId = entry.th32OwnerProcessID;
+ entry.th32OwnerProcessID, p ? " (D)" : "", exename);
+ lastProcessId = entry.th32OwnerProcessID;
}
dbg_printf("\t%08x %4d%s\n",
entry.th32ThreadID, entry.tpBasePri,
More information about the wine-patches
mailing list