Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- programs/winedbg/gdbproxy.c | 2 ++ programs/winedbg/tgt_active.c | 3 +++ 2 files changed, 5 insertions(+)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c index e7f9ddaf226..89985c06666 100644 --- a/programs/winedbg/gdbproxy.c +++ b/programs/winedbg/gdbproxy.c @@ -485,6 +485,8 @@ static BOOL handle_exception(struct gdb_context* gdbctx, EXCEPTION_DEBUG_INFO* e char name[9]; SIZE_T read;
+ if (threadname->dwType != 0x1000) + return FALSE; if (threadname->dwThreadID == -1) thread = dbg_get_thread(gdbctx->process, gdbctx->de.dwThreadId); else diff --git a/programs/winedbg/tgt_active.c b/programs/winedbg/tgt_active.c index 8c365a1e55d..50f48e8d1b8 100644 --- a/programs/winedbg/tgt_active.c +++ b/programs/winedbg/tgt_active.c @@ -245,6 +245,9 @@ static DWORD dbg_handle_exception(const EXCEPTION_RECORD* rec, BOOL first_chance break; case EXCEPTION_WINE_NAME_THREAD: pThreadName = (const THREADNAME_INFO*)(rec->ExceptionInformation); + + if (pThreadName->dwType != 0x1000) + return DBG_EXCEPTION_NOT_HANDLED; if (pThreadName->dwThreadID == -1) pThread = dbg_curr_thread; else
Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- programs/winedbg/tgt_active.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/programs/winedbg/tgt_active.c b/programs/winedbg/tgt_active.c index 50f48e8d1b8..d0c98f754ec 100644 --- a/programs/winedbg/tgt_active.c +++ b/programs/winedbg/tgt_active.c @@ -257,9 +257,12 @@ static DWORD dbg_handle_exception(const EXCEPTION_RECORD* rec, BOOL first_chance dbg_printf("Thread ID=%04lx not in our list of threads -> can't rename\n", pThreadName->dwThreadID); return DBG_CONTINUE; } - if (dbg_read_memory(pThreadName->szName, pThread->name, 9)) - dbg_printf("Thread ID=%04lx renamed using MS VC6 extension (name=="%.9s")\n", + if (dbg_read_memory(pThreadName->szName, pThread->name, sizeof(pThread->name))) + { + pThread->name[sizeof(pThread->name) - 1] = '\0'; + dbg_printf("Thread ID=%04lx renamed using MS VC6 extension (name=="%s")\n", pThread->tid, pThread->name); + } return DBG_CONTINUE; case EXCEPTION_INVALID_HANDLE: return DBG_CONTINUE;
Currently the name is only used by GDB, send the tid there.
Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- programs/winedbg/gdbproxy.c | 9 ++++++++- programs/winedbg/winedbg.c | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c index 89985c06666..0f6357268b6 100644 --- a/programs/winedbg/gdbproxy.c +++ b/programs/winedbg/gdbproxy.c @@ -1790,7 +1790,14 @@ static enum packet_return packet_query_threads(struct gdb_context* gdbctx) reply_buffer_append_str(reply, "id=""); reply_buffer_append_uinthex(reply, thread->tid, 4); reply_buffer_append_str(reply, "" name=""); - reply_buffer_append_str(reply, thread->name); + if (strlen(thread->name)) + reply_buffer_append_str(reply, thread->name); + else + { + char tid[5]; + snprintf(tid, sizeof(tid), "%04lx", thread->tid); + reply_buffer_append_str(reply, tid); + } reply_buffer_append_str(reply, ""/>"); } reply_buffer_append_str(reply, "</threads>"); diff --git a/programs/winedbg/winedbg.c b/programs/winedbg/winedbg.c index 95318eeb2f1..89fb265fc93 100644 --- a/programs/winedbg/winedbg.c +++ b/programs/winedbg/winedbg.c @@ -444,6 +444,7 @@ struct dbg_thread* dbg_add_thread(struct dbg_process* p, DWORD tid, t->step_over_bp.enabled = FALSE; t->step_over_bp.refcount = 0; t->stopped_xpoint = -1; + t->name[0] = '\0'; t->in_exception = FALSE; t->frames = NULL; t->num_frames = 0; @@ -451,8 +452,6 @@ struct dbg_thread* dbg_add_thread(struct dbg_process* p, DWORD tid, t->addr_mode = AddrModeFlat; t->suspended = FALSE;
- snprintf(t->name, sizeof(t->name), "%04lx", tid); - list_add_head(&p->threads, &t->entry);
return t;
Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- programs/winedbg/info.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/programs/winedbg/info.c b/programs/winedbg/info.c index 3ac00df911d..11a9d3402d5 100644 --- a/programs/winedbg/info.c +++ b/programs/winedbg/info.c @@ -589,12 +589,14 @@ void info_win32_threads(void) THREADENTRY32 entry; BOOL ok; DWORD lastProcessId = 0; + struct dbg_process* p = NULL; + struct dbg_thread* t = NULL;
entry.dwSize = sizeof(entry); ok = Thread32First(snap, &entry);
- dbg_printf("%-8.8s %-8.8s %s (all id:s are in hex)\n", - "process", "tid", "prio"); + dbg_printf("%-8.8s %-8.8s %s %s (all IDs are in hex)\n", + "process", "tid", "prio", "name"); while (ok) { if (entry.th32OwnerProcessID != GetCurrentProcessId()) @@ -605,10 +607,10 @@ void info_win32_threads(void) */ if (entry.th32OwnerProcessID != lastProcessId) { - struct dbg_process* p = dbg_get_process(entry.th32OwnerProcessID); PROCESSENTRY32 pcs_entry; const char* exename;
+ p = dbg_get_process(entry.th32OwnerProcessID); if (p) exename = dbg_W2A(p->imageName, -1); else if (get_process_name(entry.th32OwnerProcessID, &pcs_entry)) @@ -620,9 +622,11 @@ void info_win32_threads(void) entry.th32OwnerProcessID, p ? " (D)" : "", exename); lastProcessId = entry.th32OwnerProcessID; } - dbg_printf("\t%08lx %4ld%s\n", + t = dbg_get_thread(p, entry.th32ThreadID); + dbg_printf("\t%08lx %4ld%s %s\n", entry.th32ThreadID, entry.tpBasePri, - (entry.th32ThreadID == dbg_curr_tid) ? " <==" : ""); + (entry.th32ThreadID == dbg_curr_tid) ? " <==" : " ", + t ? t->name : "");
} ok = Thread32Next(snap, &entry);