[Lldb-commits] [lldb] r186033 - Add support for listing inferior thread names on Linux.
Ed Maste
emaste at freebsd.org
Mon Jul 15 13:00:38 PDT 2013
On 15 July 2013 15:22, Kopec, Matt <matt.kopec at intel.com> wrote:
> I'm not sure messages are the right place. We should also handle the case where a thread name changes through the pthread_setname_np call in the inferior.
>
> Since there are Linux and FreeBSD subclasses of ProcessPOSIX, we could add something like a SetThreadName virtual function to ProcessPOSIX and replace the SetName call below with this function. How about that?
On FreeBSD I don't have a ptrace event for a thread creation, so I'll
need to check the process's thread list after each stop event and
update any new / terminated / renamed threads; presumably this will be
equivalent to what Linux needs to do for just the renamed case. So
the SetThreadName implementation on FreeBSD is probably a no-op.
For a concrete example, this is what I'm currently doing upon attach
to create the threads:
if (PTRACE(PT_GETLWPLIST, pid, (void *)tids, tdcnt) < 0)
return false;
for (int i = 0; i < tdcnt; i++)
{
lldb::tid_t tid = tids[i];
if (log)
log->Printf("ProcessMonitor::%s() adding tid = %" PRIu64,
__FUNCTION__, tid);
lldb::ProcessSP processSP = process.shared_from_this();
POSIXThread *thread;
lldb::ThreadSP inferior;
struct ptrace_lwpinfo plwp;
inferior.reset(new POSIXThread(*processSP, tid));
if (PTRACE(PT_LWPINFO, tid, &plwp, sizeof(plwp)) == 0)
{
thread = static_cast<POSIXThread*>(inferior.get());
thread->SetName(plwp.pl_tdname);
}
process.GetThreadList().AddThread(inferior);
// Let our process instance know the thread has stopped.
process.SendMessage(ProcessMessage::Trace(tid));
}
More information about the lldb-commits
mailing list