[RFA] Add optional argument to "info threads" command
Michael Snyder
msnyder@vmware.com
Mon Nov 24 21:22:00 GMT 2008
Pedro Alves wrote:
> On Sunday 23 November 2008 02:12:52, Michael Snyder wrote:
>> I've long been frustrated because I could not ask for
>> info about just one or more threads.
>>
>> This patch makes use of command parsing code in breakpoint.c
>> to give "info threads" the same optional arguments as "info
>> breakpoints", ie. a list of one or more threads of interest,
>> or a range of threads (eg. "5-9").
>>
>>
>> OK?
>
> I'd like to point out that if you're debugging a multi-threaded
> application with lots of threads (the case where you'd want to use
> the range of threads feature), your implementation will, for
> each id in the specified range:
>
> 1. call prune_threads.
>
> This is a bunch of T (thread alive) packets in the remote target,
> one for each thread in the thread list -- not for each in
> range, really *for all* threads.
>
> 2. call target_find_new_threads.
>
> A bunch of qfThreadInfo packets. One for *each remote thread*, not
> just the ones specified in the range.
>
> 3. do a make_cleanup_restore_current_thread and restore
> the selected thread and frame once for each thread in the
> range. This triggers about the double amount of registers
> and memory reads than necessary.
>
> 4. also, there's a chance you'll hit the same warning in
> restore_selected_frame once for each id in the range.
>
> If you consider remote targets, and thinking that this new
> feature would be most useful if you have many threads,
> points 1-3 above can be heavy against not so fast links. I
> suggest abstracting out the bits in print_thread_info that do the
> actual printing from the bits that prune dead threads, find
> new threads, and restore the original selected frame.
Well, all your observations are correct -- but the same thing
also happens if you merely switch the thread of focus using the
"thread" command.
I do think that prune-threads and target_find_new_threads
are being called too aggressively from somewhere, but it
isn't directly from info_threads_command.
I think this is a separate, pre-existing problem that this patch
helps to reveal.
More information about the Gdb-patches
mailing list