Re: gdb show thread names

Jonny Grant <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>

On 15/06/2020 22:12, Pedro Alves wrote:
> On 6/15/20 9:53 PM, Jonny Grant wrote:
>>
>>
>> On 15/06/2020 17:21, Philippe Waroquiers wrote:
>>> On Mon, 2020-06-15 at 16:51 +0100, Pedro Alves wrote:
>>>>
>>>> Starting program: /home/pedro/brno/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.threads/names/names 
>>>> [Thread debugging using libthread_db enabled]
>>>> Using host libthread_db library "/lib64/libthread_db.so.1".
>>>> [New Thread 0x7ffff74b8700 (LWP 24171) "main"]
>>>> [New Thread 0x7ffff6cb7700 (LWP 24172) "main"]
>>>> [New Thread 0x7ffff64b6700 (LWP 24173) "main"]
>>>>
>>>> Thread 1 "main" hit Breakpoint 1, all_threads_ready () at /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.threads/names.c:51
>>>> 51      }
>>>> (gdb) info threads 
>>>>   Id   Target Id                                  Frame 
>>>> * 1    Thread 0x7ffff7fb5740 (LWP 24170) "main"   all_threads_ready () at /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.threads/names.c:51
>>>>   2    Thread 0x7ffff74b8700 (LWP 24171) "carrot" 0x00007ffff7bc89aa in futex_wait (private=0, expected=4, futex_word=0x7fffffffd604) at ../sysdeps/unix/sysv/linux/futex-internal.h:61
>>>>   3    Thread 0x7ffff6cb7700 (LWP 24172) "potato" 0x00007ffff7bc89aa in futex_wait (private=0, expected=4, futex_word=0x7fffffffd604) at ../sysdeps/unix/sysv/linux/futex-internal.h:61
>>>>   4    Thread 0x7ffff64b6700 (LWP 24173) "celery" 0x00007ffff7bc89aa in futex_wait (private=0, expected=4, futex_word=0x7fffffffd604) at ../sysdeps/unix/sysv/linux/futex-internal.h:61
>>>> (gdb) 
>>>>
>>>> I.e., printing the thread name when the thread is created
>>>> looks more confusing than helpful to me.
>>> Yes, that is confusing.
>>>
>>> And for the following events, when I tried, the patch was far to be ready 
>>> e.g. for the exit events, it gives (for the above):
>>>   (gdb) c
>>>   Continuing.
>>>   [Thread 0x7ffff743d700 (LWP 22783) exited]
>>>   [Thread 0x7ffff7c3e700 (LWP 22782) exited]
>>>   [Thread 0x7ffff7c3f740 (LWP 22778) "main" exited]
>>>
>>> So, unclear why there is no carrot, potato or celery in the 2 exited threads
>>> but "main" is present.
>>> (and sometimes there is no names in any exited event).
>>>
>>> So, when I looked at it, it needed quite some more work ...
>>>
>>> Philippe
>>>
>>
>> Hi, Maybe it is more complicated than it is worth after all.
>> Although, I did think new threads inherited the process executable name, rather than the main() symbol.
> 
> It's not the main() symbol, it's the name of the parent thread.
> The testcase does:
> 
>   pthread_setname_np (pthread_self (), "main");
> 
> on the main thread before spawning the other threads.
> 
> So a child thread of "carrot" would be called "carrot" too by
> default, until it changed its name.
> 
> If we removed that pthread_setname_np call on the main thread, then
> the main thread's name would default to the process executable name
> indeed.
> 
> 
> If we included the thread id in these notifications instead, I think it
> would be quite useful.  Like, we could have:
> 
>  [Thread 1.2 (0x7ffff74b8700 (LWP 13984)) created]
>  [Thread 1.2 (0x7ffff74b8700 (LWP 13984)) exited]


I'm just looking at my original email, I saw present behaviour is :-

[Thread 0x7fff695e9700 (LWP 3580240) exited]
[New Thread 0x7fff98ff9700 (LWP 3580609)]

May I ask which do you refer to as the 'thread id'?
I know on the Linux kernel there is gettid syscall, but they don't correspond to the pthread_self() handle.

Jonny
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.