1 /* Multi-process/thread control for GDB, the GNU debugger.
3 Copyright (C) 1986-2022 Free Software Foundation, Inc.
5 Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include "gdbsupport/environ.h"
29 #include "gdbthread.h"
36 #include <sys/types.h>
39 #include "observable.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-option.h"
43 #include "gdbsupport/gdb_regex.h"
44 #include "cli/cli-utils.h"
45 #include "thread-fsm.h"
46 #include "tid-parse.h"
48 #include "gdbsupport/gdb_optional.h"
49 #include "inline-frame.h"
52 /* See gdbthread.h. */
54 bool debug_threads
= false;
56 /* Implement 'show debug threads'. */
59 show_debug_threads (struct ui_file
*file
, int from_tty
,
60 struct cmd_list_element
*c
, const char *value
)
62 gdb_printf (file
, _("Thread debugging is \"%s\".\n"), value
);
65 /* Definition of struct thread_info exported to gdbthread.h. */
67 /* Prototypes for local functions. */
69 static int highest_thread_num
;
71 /* The current/selected thread. */
72 static thread_info
*current_thread_
;
74 /* Returns true if THR is the current thread. */
77 is_current_thread (const thread_info
*thr
)
79 return thr
== current_thread_
;
83 inferior_thread (void)
85 gdb_assert (current_thread_
!= nullptr);
86 return current_thread_
;
89 /* Delete the breakpoint pointed at by BP_P, if there's one. */
92 delete_thread_breakpoint (struct breakpoint
**bp_p
)
96 delete_breakpoint (*bp_p
);
102 delete_step_resume_breakpoint (struct thread_info
*tp
)
105 delete_thread_breakpoint (&tp
->control
.step_resume_breakpoint
);
109 delete_exception_resume_breakpoint (struct thread_info
*tp
)
112 delete_thread_breakpoint (&tp
->control
.exception_resume_breakpoint
);
115 /* See gdbthread.h. */
118 delete_single_step_breakpoints (struct thread_info
*tp
)
121 delete_thread_breakpoint (&tp
->control
.single_step_breakpoints
);
124 /* Delete the breakpoint pointed at by BP_P at the next stop, if
128 delete_at_next_stop (struct breakpoint
**bp
)
132 (*bp
)->disposition
= disp_del_at_next_stop
;
137 /* See gdbthread.h. */
140 thread_has_single_step_breakpoints_set (struct thread_info
*tp
)
142 return tp
->control
.single_step_breakpoints
!= NULL
;
145 /* See gdbthread.h. */
148 thread_has_single_step_breakpoint_here (struct thread_info
*tp
,
149 const address_space
*aspace
,
152 struct breakpoint
*ss_bps
= tp
->control
.single_step_breakpoints
;
154 return (ss_bps
!= NULL
155 && breakpoint_has_location_inserted_here (ss_bps
, aspace
, addr
));
158 /* See gdbthread.h. */
161 thread_cancel_execution_command (struct thread_info
*thr
)
163 if (thr
->thread_fsm () != nullptr)
165 std::unique_ptr
<thread_fsm
> fsm
= thr
->release_thread_fsm ();
171 clear_thread_inferior_resources (struct thread_info
*tp
)
173 /* NOTE: this will take care of any left-over step_resume breakpoints,
174 but not any user-specified thread-specific breakpoints. We can not
175 delete the breakpoint straight-off, because the inferior might not
176 be stopped at the moment. */
177 delete_at_next_stop (&tp
->control
.step_resume_breakpoint
);
178 delete_at_next_stop (&tp
->control
.exception_resume_breakpoint
);
179 delete_at_next_stop (&tp
->control
.single_step_breakpoints
);
181 delete_longjmp_breakpoint_at_next_stop (tp
->global_num
);
183 bpstat_clear (&tp
->control
.stop_bpstat
);
185 btrace_teardown (tp
);
187 thread_cancel_execution_command (tp
);
189 clear_inline_frame_state (tp
);
192 /* See gdbthread.h. */
195 set_thread_exited (thread_info
*tp
, bool silent
)
197 /* Dead threads don't need to step-over. Remove from chain. */
198 if (thread_is_in_step_over_chain (tp
))
199 global_thread_step_over_chain_remove (tp
);
201 if (tp
->state
!= THREAD_EXITED
)
203 process_stratum_target
*proc_target
= tp
->inf
->process_target ();
205 /* Some targets unpush themselves from the inferior's target stack before
206 clearing the inferior's thread list (which marks all threads as exited,
207 and therefore leads to this function). In this case, the inferior's
208 process target will be nullptr when we arrive here.
210 See also the comment in inferior::unpush_target. */
211 if (proc_target
!= nullptr)
212 proc_target
->maybe_remove_resumed_with_pending_wait_status (tp
);
214 gdb::observers::thread_exit
.notify (tp
, silent
);
216 /* Tag it as exited. */
217 tp
->state
= THREAD_EXITED
;
219 /* Clear breakpoints, etc. associated with this thread. */
220 clear_thread_inferior_resources (tp
);
222 /* Remove from the ptid_t map. We don't want for
223 find_thread_ptid to find exited threads. Also, the target
224 may reuse the ptid for a new thread, and there can only be
225 one value per key; adding a new thread with the same ptid_t
226 would overwrite the exited thread's ptid entry. */
227 size_t nr_deleted
= tp
->inf
->ptid_thread_map
.erase (tp
->ptid
);
228 gdb_assert (nr_deleted
== 1);
233 init_thread_list (void)
235 highest_thread_num
= 0;
237 for (inferior
*inf
: all_inferiors ())
238 inf
->clear_thread_list (true);
241 /* Allocate a new thread of inferior INF with target id PTID and add
242 it to the thread list. */
244 static struct thread_info
*
245 new_thread (struct inferior
*inf
, ptid_t ptid
)
247 thread_info
*tp
= new thread_info (inf
, ptid
);
249 threads_debug_printf ("creating a new thread object, inferior %d, ptid %s",
250 inf
->num
, ptid
.to_string ().c_str ());
252 inf
->thread_list
.push_back (*tp
);
254 /* A thread with this ptid should not exist in the map yet. */
255 gdb_assert (inf
->ptid_thread_map
.find (ptid
) == inf
->ptid_thread_map
.end ());
257 inf
->ptid_thread_map
[ptid
] = tp
;
263 add_thread_silent (process_stratum_target
*targ
, ptid_t ptid
)
265 gdb_assert (targ
!= nullptr);
267 inferior
*inf
= find_inferior_ptid (targ
, ptid
);
269 threads_debug_printf ("add thread to inferior %d, ptid %s, target %s",
270 inf
->num
, ptid
.to_string ().c_str (),
273 /* We may have an old thread with the same id in the thread list.
274 If we do, it must be dead, otherwise we wouldn't be adding a new
275 thread with the same id. The OS is reusing this id --- delete
276 the old thread, and create a new one. */
277 thread_info
*tp
= find_thread_ptid (inf
, ptid
);
281 tp
= new_thread (inf
, ptid
);
282 gdb::observers::new_thread
.notify (tp
);
288 add_thread_with_info (process_stratum_target
*targ
, ptid_t ptid
,
289 private_thread_info
*priv
)
291 thread_info
*result
= add_thread_silent (targ
, ptid
);
293 result
->priv
.reset (priv
);
295 if (print_thread_events
)
296 gdb_printf (_("[New %s]\n"), target_pid_to_str (ptid
).c_str ());
298 annotate_new_thread ();
303 add_thread (process_stratum_target
*targ
, ptid_t ptid
)
305 return add_thread_with_info (targ
, ptid
, NULL
);
308 private_thread_info::~private_thread_info () = default;
310 thread_info::thread_info (struct inferior
*inf_
, ptid_t ptid_
)
311 : ptid (ptid_
), inf (inf_
)
313 gdb_assert (inf_
!= NULL
);
315 this->global_num
= ++highest_thread_num
;
316 this->per_inf_num
= ++inf_
->highest_thread_num
;
318 /* Nothing to follow yet. */
319 this->pending_follow
.set_spurious ();
322 /* See gdbthread.h. */
324 thread_info::~thread_info ()
326 threads_debug_printf ("thread %s", this->ptid
.to_string ().c_str ());
329 /* See gdbthread.h. */
332 thread_info::deletable () const
334 /* If this is the current thread, or there's code out there that
335 relies on it existing (refcount > 0) we can't delete yet. */
336 return refcount () == 0 && !is_current_thread (this);
339 /* See gdbthread.h. */
342 thread_info::set_executing (bool executing
)
344 m_executing
= executing
;
346 this->clear_stop_pc ();
349 /* See gdbthread.h. */
352 thread_info::set_resumed (bool resumed
)
354 if (resumed
== m_resumed
)
357 process_stratum_target
*proc_target
= this->inf
->process_target ();
359 /* If we transition from resumed to not resumed, we might need to remove
360 the thread from the resumed threads with pending statuses list. */
362 proc_target
->maybe_remove_resumed_with_pending_wait_status (this);
366 /* If we transition from not resumed to resumed, we might need to add
367 the thread to the resumed threads with pending statuses list. */
369 proc_target
->maybe_add_resumed_with_pending_wait_status (this);
372 /* See gdbthread.h. */
375 thread_info::set_pending_waitstatus (const target_waitstatus
&ws
)
377 gdb_assert (!this->has_pending_waitstatus ());
379 m_suspend
.waitstatus
= ws
;
380 m_suspend
.waitstatus_pending_p
= 1;
382 process_stratum_target
*proc_target
= this->inf
->process_target ();
383 proc_target
->maybe_add_resumed_with_pending_wait_status (this);
386 /* See gdbthread.h. */
389 thread_info::clear_pending_waitstatus ()
391 gdb_assert (this->has_pending_waitstatus ());
393 process_stratum_target
*proc_target
= this->inf
->process_target ();
394 proc_target
->maybe_remove_resumed_with_pending_wait_status (this);
396 m_suspend
.waitstatus_pending_p
= 0;
399 /* See gdbthread.h. */
402 thread_is_in_step_over_chain (struct thread_info
*tp
)
404 return tp
->step_over_list_node
.is_linked ();
407 /* See gdbthread.h. */
410 thread_step_over_chain_length (const thread_step_over_list
&l
)
414 for (const thread_info
&thread ATTRIBUTE_UNUSED
: l
)
420 /* See gdbthread.h. */
423 global_thread_step_over_chain_enqueue (struct thread_info
*tp
)
425 infrun_debug_printf ("enqueueing thread %s in global step over chain",
426 tp
->ptid
.to_string ().c_str ());
428 gdb_assert (!thread_is_in_step_over_chain (tp
));
429 global_thread_step_over_list
.push_back (*tp
);
432 /* See gdbthread.h. */
435 global_thread_step_over_chain_enqueue_chain (thread_step_over_list
&&list
)
437 global_thread_step_over_list
.splice (std::move (list
));
440 /* See gdbthread.h. */
443 global_thread_step_over_chain_remove (struct thread_info
*tp
)
445 infrun_debug_printf ("removing thread %s from global step over chain",
446 tp
->ptid
.to_string ().c_str ());
448 gdb_assert (thread_is_in_step_over_chain (tp
));
449 auto it
= global_thread_step_over_list
.iterator_to (*tp
);
450 global_thread_step_over_list
.erase (it
);
453 /* Delete the thread referenced by THR. If SILENT, don't notify
454 the observer of this exit.
456 THR must not be NULL or a failed assertion will be raised. */
459 delete_thread_1 (thread_info
*thr
, bool silent
)
461 gdb_assert (thr
!= nullptr);
463 threads_debug_printf ("deleting thread %s, silent = %d",
464 thr
->ptid
.to_string ().c_str (), silent
);
466 set_thread_exited (thr
, silent
);
468 if (!thr
->deletable ())
470 /* Will be really deleted some other time. */
474 auto it
= thr
->inf
->thread_list
.iterator_to (*thr
);
475 thr
->inf
->thread_list
.erase (it
);
480 /* See gdbthread.h. */
483 delete_thread (thread_info
*thread
)
485 delete_thread_1 (thread
, false /* not silent */);
489 delete_thread_silent (thread_info
*thread
)
491 delete_thread_1 (thread
, true /* silent */);
495 find_thread_global_id (int global_id
)
497 for (thread_info
*tp
: all_threads ())
498 if (tp
->global_num
== global_id
)
504 static struct thread_info
*
505 find_thread_id (struct inferior
*inf
, int thr_num
)
507 for (thread_info
*tp
: inf
->threads ())
508 if (tp
->per_inf_num
== thr_num
)
514 /* See gdbthread.h. */
517 find_thread_ptid (process_stratum_target
*targ
, ptid_t ptid
)
519 inferior
*inf
= find_inferior_ptid (targ
, ptid
);
522 return find_thread_ptid (inf
, ptid
);
525 /* See gdbthread.h. */
528 find_thread_ptid (inferior
*inf
, ptid_t ptid
)
530 gdb_assert (inf
!= nullptr);
532 auto it
= inf
->ptid_thread_map
.find (ptid
);
533 if (it
!= inf
->ptid_thread_map
.end ())
539 /* See gdbthread.h. */
542 find_thread_by_handle (gdb::array_view
<const gdb_byte
> handle
,
543 struct inferior
*inf
)
545 return target_thread_handle_to_thread_info (handle
.data (),
551 * Thread iterator function.
553 * Calls a callback function once for each thread, so long as
554 * the callback function returns false. If the callback function
555 * returns true, the iteration will end and the current thread
556 * will be returned. This can be useful for implementing a
557 * search for a thread with arbitrary attributes, or for applying
558 * some operation to every thread.
560 * FIXME: some of the existing functionality, such as
561 * "Thread apply all", might be rewritten using this functionality.
565 iterate_over_threads (int (*callback
) (struct thread_info
*, void *),
568 for (thread_info
*tp
: all_threads_safe ())
569 if ((*callback
) (tp
, data
))
575 /* See gdbthread.h. */
580 for (thread_info
*tp ATTRIBUTE_UNUSED
: all_threads ())
586 thread_count (process_stratum_target
*proc_target
)
588 auto rng
= all_threads (proc_target
);
589 return std::distance (rng
.begin (), rng
.end ());
592 /* Return the number of non-exited threads in the thread list. */
595 live_threads_count (void)
597 auto rng
= all_non_exited_threads ();
598 return std::distance (rng
.begin (), rng
.end ());
602 valid_global_thread_id (int global_id
)
604 for (thread_info
*tp
: all_threads ())
605 if (tp
->global_num
== global_id
)
612 in_thread_list (process_stratum_target
*targ
, ptid_t ptid
)
614 return find_thread_ptid (targ
, ptid
) != nullptr;
617 /* Finds the first thread of the inferior. */
620 first_thread_of_inferior (inferior
*inf
)
622 if (inf
->thread_list
.empty ())
625 return &inf
->thread_list
.front ();
629 any_thread_of_inferior (inferior
*inf
)
631 gdb_assert (inf
->pid
!= 0);
633 /* Prefer the current thread, if there's one. */
634 if (inf
== current_inferior () && inferior_ptid
!= null_ptid
)
635 return inferior_thread ();
637 for (thread_info
*tp
: inf
->non_exited_threads ())
644 any_live_thread_of_inferior (inferior
*inf
)
646 struct thread_info
*curr_tp
= NULL
;
647 struct thread_info
*tp_executing
= NULL
;
649 gdb_assert (inf
!= NULL
&& inf
->pid
!= 0);
651 /* Prefer the current thread if it's not executing. */
652 if (inferior_ptid
!= null_ptid
&& current_inferior () == inf
)
654 /* If the current thread is dead, forget it. If it's not
655 executing, use it. Otherwise, still choose it (below), but
656 only if no other non-executing thread is found. */
657 curr_tp
= inferior_thread ();
658 if (curr_tp
->state
== THREAD_EXITED
)
660 else if (!curr_tp
->executing ())
664 for (thread_info
*tp
: inf
->non_exited_threads ())
666 if (!tp
->executing ())
672 /* If both the current thread and all live threads are executing,
673 prefer the current thread. */
677 /* Otherwise, just return an executing thread, if any. */
681 /* Return true if TP is an active thread. */
683 thread_alive (thread_info
*tp
)
685 if (tp
->state
== THREAD_EXITED
)
688 /* Ensure we're looking at the right target stack. */
689 gdb_assert (tp
->inf
== current_inferior ());
691 return target_thread_alive (tp
->ptid
);
694 /* See gdbthreads.h. */
697 switch_to_thread_if_alive (thread_info
*thr
)
699 scoped_restore_current_thread restore_thread
;
701 /* Switch inferior first, so that we're looking at the right target
703 switch_to_inferior_no_thread (thr
->inf
);
705 if (thread_alive (thr
))
707 switch_to_thread (thr
);
708 restore_thread
.dont_restore ();
715 /* See gdbthreads.h. */
720 scoped_restore_current_thread restore_thread
;
722 for (thread_info
*tp
: all_threads_safe ())
724 switch_to_inferior_no_thread (tp
->inf
);
726 if (!thread_alive (tp
))
731 /* See gdbthreads.h. */
734 delete_exited_threads (void)
736 for (thread_info
*tp
: all_threads_safe ())
737 if (tp
->state
== THREAD_EXITED
)
741 /* Return true value if stack temporaries are enabled for the thread
745 thread_stack_temporaries_enabled_p (thread_info
*tp
)
750 return tp
->stack_temporaries_enabled
;
753 /* Push V on to the stack temporaries of the thread with id PTID. */
756 push_thread_stack_temporary (thread_info
*tp
, struct value
*v
)
758 gdb_assert (tp
!= NULL
&& tp
->stack_temporaries_enabled
);
759 tp
->stack_temporaries
.push_back (v
);
762 /* Return true if VAL is among the stack temporaries of the thread
763 TP. Return false otherwise. */
766 value_in_thread_stack_temporaries (struct value
*val
, thread_info
*tp
)
768 gdb_assert (tp
!= NULL
&& tp
->stack_temporaries_enabled
);
769 for (value
*v
: tp
->stack_temporaries
)
776 /* Return the last of the stack temporaries for thread with id PTID.
777 Return NULL if there are no stack temporaries for the thread. */
780 get_last_thread_stack_temporary (thread_info
*tp
)
782 struct value
*lastval
= NULL
;
784 gdb_assert (tp
!= NULL
);
785 if (!tp
->stack_temporaries
.empty ())
786 lastval
= tp
->stack_temporaries
.back ();
792 thread_change_ptid (process_stratum_target
*targ
,
793 ptid_t old_ptid
, ptid_t new_ptid
)
795 struct inferior
*inf
;
796 struct thread_info
*tp
;
798 /* It can happen that what we knew as the target inferior id
799 changes. E.g, target remote may only discover the remote process
800 pid after adding the inferior to GDB's list. */
801 inf
= find_inferior_ptid (targ
, old_ptid
);
802 inf
->pid
= new_ptid
.pid ();
804 tp
= find_thread_ptid (inf
, old_ptid
);
805 gdb_assert (tp
!= nullptr);
807 int num_erased
= inf
->ptid_thread_map
.erase (old_ptid
);
808 gdb_assert (num_erased
== 1);
811 inf
->ptid_thread_map
[new_ptid
] = tp
;
813 gdb::observers::thread_ptid_changed
.notify (targ
, old_ptid
, new_ptid
);
816 /* See gdbthread.h. */
819 set_resumed (process_stratum_target
*targ
, ptid_t ptid
, bool resumed
)
821 for (thread_info
*tp
: all_non_exited_threads (targ
, ptid
))
822 tp
->set_resumed (resumed
);
825 /* Helper for set_running, that marks one thread either running or
829 set_running_thread (struct thread_info
*tp
, bool running
)
831 bool started
= false;
833 if (running
&& tp
->state
== THREAD_STOPPED
)
835 tp
->state
= running
? THREAD_RUNNING
: THREAD_STOPPED
;
839 /* If the thread is now marked stopped, remove it from
840 the step-over queue, so that we don't try to resume
841 it until the user wants it to. */
842 if (thread_is_in_step_over_chain (tp
))
843 global_thread_step_over_chain_remove (tp
);
849 /* See gdbthread.h. */
852 thread_info::set_running (bool running
)
854 if (set_running_thread (this, running
))
855 gdb::observers::target_resumed
.notify (this->ptid
);
859 set_running (process_stratum_target
*targ
, ptid_t ptid
, bool running
)
861 /* We try not to notify the observer if no thread has actually
862 changed the running state -- merely to reduce the number of
863 messages to the MI frontend. A frontend is supposed to handle
864 multiple *running notifications just fine. */
865 bool any_started
= false;
867 for (thread_info
*tp
: all_non_exited_threads (targ
, ptid
))
868 if (set_running_thread (tp
, running
))
872 gdb::observers::target_resumed
.notify (ptid
);
876 set_executing (process_stratum_target
*targ
, ptid_t ptid
, bool executing
)
878 for (thread_info
*tp
: all_non_exited_threads (targ
, ptid
))
879 tp
->set_executing (executing
);
881 /* It only takes one running thread to spawn more threads. */
883 targ
->threads_executing
= true;
884 /* Only clear the flag if the caller is telling us everything is
886 else if (minus_one_ptid
== ptid
)
887 targ
->threads_executing
= false;
890 /* See gdbthread.h. */
893 threads_are_executing (process_stratum_target
*target
)
895 return target
->threads_executing
;
899 set_stop_requested (process_stratum_target
*targ
, ptid_t ptid
, bool stop
)
901 for (thread_info
*tp
: all_non_exited_threads (targ
, ptid
))
902 tp
->stop_requested
= stop
;
904 /* Call the stop requested observer so other components of GDB can
905 react to this request. */
907 gdb::observers::thread_stop_requested
.notify (ptid
);
911 finish_thread_state (process_stratum_target
*targ
, ptid_t ptid
)
913 bool any_started
= false;
915 for (thread_info
*tp
: all_non_exited_threads (targ
, ptid
))
916 if (set_running_thread (tp
, tp
->executing ()))
920 gdb::observers::target_resumed
.notify (ptid
);
923 /* See gdbthread.h. */
926 validate_registers_access (void)
928 /* No selected thread, no registers. */
929 if (inferior_ptid
== null_ptid
)
930 error (_("No thread selected."));
932 thread_info
*tp
= inferior_thread ();
934 /* Don't try to read from a dead thread. */
935 if (tp
->state
== THREAD_EXITED
)
936 error (_("The current thread has terminated"));
938 /* ... or from a spinning thread. FIXME: This isn't actually fully
939 correct. It'll allow an user-requested access (e.g., "print $pc"
940 at the prompt) when a thread is not executing for some internal
941 reason, but is marked running from the user's perspective. E.g.,
942 the thread is waiting for its turn in the step-over queue. */
943 if (tp
->executing ())
944 error (_("Selected thread is running."));
947 /* See gdbthread.h. */
950 can_access_registers_thread (thread_info
*thread
)
952 /* No thread, no registers. */
956 /* Don't try to read from a dead thread. */
957 if (thread
->state
== THREAD_EXITED
)
960 /* ... or from a spinning thread. FIXME: see validate_registers_access. */
961 if (thread
->executing ())
968 pc_in_thread_step_range (CORE_ADDR pc
, struct thread_info
*thread
)
970 return (pc
>= thread
->control
.step_range_start
971 && pc
< thread
->control
.step_range_end
);
974 /* Helper for print_thread_info. Returns true if THR should be
975 printed. If REQUESTED_THREADS, a list of GDB ids/ranges, is not
976 NULL, only print THR if its ID is included in the list. GLOBAL_IDS
977 is true if REQUESTED_THREADS is list of global IDs, false if a list
978 of per-inferior thread ids. If PID is not -1, only print THR if it
979 is a thread from the process PID. Otherwise, threads from all
980 attached PIDs are printed. If both REQUESTED_THREADS is not NULL
981 and PID is not -1, then the thread is printed if it belongs to the
982 specified process. Otherwise, an error is raised. */
985 should_print_thread (const char *requested_threads
, int default_inf_num
,
986 int global_ids
, int pid
, struct thread_info
*thr
)
988 if (requested_threads
!= NULL
&& *requested_threads
!= '\0')
993 in_list
= number_is_in_list (requested_threads
, thr
->global_num
);
995 in_list
= tid_is_in_list (requested_threads
, default_inf_num
,
996 thr
->inf
->num
, thr
->per_inf_num
);
1001 if (pid
!= -1 && thr
->ptid
.pid () != pid
)
1003 if (requested_threads
!= NULL
&& *requested_threads
!= '\0')
1004 error (_("Requested thread not found in requested process"));
1008 if (thr
->state
== THREAD_EXITED
)
1014 /* Return the string to display in "info threads"'s "Target Id"
1018 thread_target_id_str (thread_info
*tp
)
1020 std::string target_id
= target_pid_to_str (tp
->ptid
);
1021 const char *extra_info
= target_extra_thread_info (tp
);
1022 const char *name
= thread_name (tp
);
1024 if (extra_info
!= nullptr && name
!= nullptr)
1025 return string_printf ("%s \"%s\" (%s)", target_id
.c_str (), name
,
1027 else if (extra_info
!= nullptr)
1028 return string_printf ("%s (%s)", target_id
.c_str (), extra_info
);
1029 else if (name
!= nullptr)
1030 return string_printf ("%s \"%s\"", target_id
.c_str (), name
);
1035 /* Like print_thread_info, but in addition, GLOBAL_IDS indicates
1036 whether REQUESTED_THREADS is a list of global or per-inferior
1040 print_thread_info_1 (struct ui_out
*uiout
, const char *requested_threads
,
1041 int global_ids
, int pid
,
1042 int show_global_ids
)
1044 int default_inf_num
= current_inferior ()->num
;
1046 update_thread_list ();
1048 /* Whether we saw any thread. */
1049 bool any_thread
= false;
1050 /* Whether the current thread is exited. */
1051 bool current_exited
= false;
1053 thread_info
*current_thread
= (inferior_ptid
!= null_ptid
1054 ? inferior_thread () : NULL
);
1057 /* For backward compatibility, we make a list for MI. A table is
1058 preferable for the CLI, though, because it shows table
1060 gdb::optional
<ui_out_emit_list
> list_emitter
;
1061 gdb::optional
<ui_out_emit_table
> table_emitter
;
1063 /* We'll be switching threads temporarily below. */
1064 scoped_restore_current_thread restore_thread
;
1066 if (uiout
->is_mi_like_p ())
1067 list_emitter
.emplace (uiout
, "threads");
1071 /* The width of the "Target Id" column. Grown below to
1072 accommodate the largest entry. */
1073 size_t target_id_col_width
= 17;
1075 for (thread_info
*tp
: all_threads ())
1077 if (!should_print_thread (requested_threads
, default_inf_num
,
1078 global_ids
, pid
, tp
))
1081 if (!uiout
->is_mi_like_p ())
1083 /* Switch inferiors so we're looking at the right
1085 switch_to_inferior_no_thread (tp
->inf
);
1088 = std::max (target_id_col_width
,
1089 thread_target_id_str (tp
).size ());
1097 if (requested_threads
== NULL
|| *requested_threads
== '\0')
1098 uiout
->message (_("No threads.\n"));
1100 uiout
->message (_("No threads match '%s'.\n"),
1105 table_emitter
.emplace (uiout
, show_global_ids
? 5 : 4,
1106 n_threads
, "threads");
1108 uiout
->table_header (1, ui_left
, "current", "");
1109 uiout
->table_header (4, ui_left
, "id-in-tg", "Id");
1110 if (show_global_ids
)
1111 uiout
->table_header (4, ui_left
, "id", "GId");
1112 uiout
->table_header (target_id_col_width
, ui_left
,
1113 "target-id", "Target Id");
1114 uiout
->table_header (1, ui_left
, "frame", "Frame");
1115 uiout
->table_body ();
1118 for (inferior
*inf
: all_inferiors ())
1119 for (thread_info
*tp
: inf
->threads ())
1124 if (tp
== current_thread
&& tp
->state
== THREAD_EXITED
)
1125 current_exited
= true;
1127 if (!should_print_thread (requested_threads
, default_inf_num
,
1128 global_ids
, pid
, tp
))
1131 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
1133 if (!uiout
->is_mi_like_p ())
1135 if (tp
== current_thread
)
1136 uiout
->field_string ("current", "*");
1138 uiout
->field_skip ("current");
1140 uiout
->field_string ("id-in-tg", print_thread_id (tp
));
1143 if (show_global_ids
|| uiout
->is_mi_like_p ())
1144 uiout
->field_signed ("id", tp
->global_num
);
1146 /* Switch to the thread (and inferior / target). */
1147 switch_to_thread (tp
);
1149 /* For the CLI, we stuff everything into the target-id field.
1150 This is a gross hack to make the output come out looking
1151 correct. The underlying problem here is that ui-out has no
1152 way to specify that a field's space allocation should be
1153 shared by several fields. For MI, we do the right thing
1156 if (uiout
->is_mi_like_p ())
1158 uiout
->field_string ("target-id", target_pid_to_str (tp
->ptid
));
1160 const char *extra_info
= target_extra_thread_info (tp
);
1161 if (extra_info
!= nullptr)
1162 uiout
->field_string ("details", extra_info
);
1164 const char *name
= thread_name (tp
);
1166 uiout
->field_string ("name", name
);
1170 uiout
->field_string ("target-id", thread_target_id_str (tp
));
1173 if (tp
->state
== THREAD_RUNNING
)
1174 uiout
->text ("(running)\n");
1177 /* The switch above put us at the top of the stack (leaf
1179 print_stack_frame (get_selected_frame (NULL
),
1180 /* For MI output, print frame level. */
1181 uiout
->is_mi_like_p (),
1185 if (uiout
->is_mi_like_p ())
1187 const char *state
= "stopped";
1189 if (tp
->state
== THREAD_RUNNING
)
1191 uiout
->field_string ("state", state
);
1194 core
= target_core_of_thread (tp
->ptid
);
1195 if (uiout
->is_mi_like_p () && core
!= -1)
1196 uiout
->field_signed ("core", core
);
1199 /* This end scope restores the current thread and the frame
1200 selected before the "info threads" command, and it finishes the
1201 ui-out list or table. */
1204 if (pid
== -1 && requested_threads
== NULL
)
1206 if (uiout
->is_mi_like_p () && inferior_ptid
!= null_ptid
)
1207 uiout
->field_signed ("current-thread-id", current_thread
->global_num
);
1209 if (inferior_ptid
!= null_ptid
&& current_exited
)
1210 uiout
->message ("\n\
1211 The current thread <Thread ID %s> has terminated. See `help thread'.\n",
1212 print_thread_id (inferior_thread ()));
1213 else if (any_thread
&& inferior_ptid
== null_ptid
)
1214 uiout
->message ("\n\
1215 No selected thread. See `help thread'.\n");
1219 /* See gdbthread.h. */
1222 print_thread_info (struct ui_out
*uiout
, const char *requested_threads
,
1225 print_thread_info_1 (uiout
, requested_threads
, 1, pid
, 0);
1228 /* The options for the "info threads" command. */
1230 struct info_threads_opts
1233 bool show_global_ids
= false;
1236 static const gdb::option::option_def info_threads_option_defs
[] = {
1238 gdb::option::flag_option_def
<info_threads_opts
> {
1240 [] (info_threads_opts
*opts
) { return &opts
->show_global_ids
; },
1241 N_("Show global thread IDs."),
1246 /* Create an option_def_group for the "info threads" options, with
1247 IT_OPTS as context. */
1249 static inline gdb::option::option_def_group
1250 make_info_threads_options_def_group (info_threads_opts
*it_opts
)
1252 return {{info_threads_option_defs
}, it_opts
};
1255 /* Implementation of the "info threads" command.
1257 Note: this has the drawback that it _really_ switches
1258 threads, which frees the frame cache. A no-side
1259 effects info-threads command would be nicer. */
1262 info_threads_command (const char *arg
, int from_tty
)
1264 info_threads_opts it_opts
;
1266 auto grp
= make_info_threads_options_def_group (&it_opts
);
1267 gdb::option::process_options
1268 (&arg
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, grp
);
1270 print_thread_info_1 (current_uiout
, arg
, 0, -1, it_opts
.show_global_ids
);
1273 /* Completer for the "info threads" command. */
1276 info_threads_command_completer (struct cmd_list_element
*ignore
,
1277 completion_tracker
&tracker
,
1278 const char *text
, const char *word_ignored
)
1280 const auto grp
= make_info_threads_options_def_group (nullptr);
1282 if (gdb::option::complete_options
1283 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, grp
))
1286 /* Convenience to let the user know what the option can accept. */
1289 gdb::option::complete_on_all_options (tracker
, grp
);
1290 /* Keep this "ID" in sync with what "help info threads"
1292 tracker
.add_completion (make_unique_xstrdup ("ID"));
1296 /* See gdbthread.h. */
1299 switch_to_thread_no_regs (struct thread_info
*thread
)
1301 struct inferior
*inf
= thread
->inf
;
1303 set_current_program_space (inf
->pspace
);
1304 set_current_inferior (inf
);
1306 current_thread_
= thread
;
1307 inferior_ptid
= current_thread_
->ptid
;
1310 /* See gdbthread.h. */
1313 switch_to_no_thread ()
1315 if (current_thread_
== nullptr)
1318 current_thread_
= nullptr;
1319 inferior_ptid
= null_ptid
;
1320 reinit_frame_cache ();
1323 /* See gdbthread.h. */
1326 switch_to_thread (thread_info
*thr
)
1328 gdb_assert (thr
!= NULL
);
1330 if (is_current_thread (thr
))
1333 switch_to_thread_no_regs (thr
);
1335 reinit_frame_cache ();
1338 /* See gdbsupport/common-gdbthread.h. */
1341 switch_to_thread (process_stratum_target
*proc_target
, ptid_t ptid
)
1343 thread_info
*thr
= find_thread_ptid (proc_target
, ptid
);
1344 switch_to_thread (thr
);
1350 scoped_restore_current_thread::restore ()
1352 /* If an entry of thread_info was previously selected, it won't be
1353 deleted because we've increased its refcount. The thread represented
1354 by this thread_info entry may have already exited (due to normal exit,
1355 detach, etc), so the thread_info.state is THREAD_EXITED. */
1356 if (m_thread
!= NULL
1357 /* If the previously selected thread belonged to a process that has
1358 in the mean time exited (or killed, detached, etc.), then don't revert
1359 back to it, but instead simply drop back to no thread selected. */
1361 switch_to_thread (m_thread
.get ());
1363 switch_to_inferior_no_thread (m_inf
.get ());
1365 /* The running state of the originally selected thread may have
1366 changed, so we have to recheck it here. */
1367 if (inferior_ptid
!= null_ptid
1369 && m_thread
->state
== THREAD_STOPPED
1370 && target_has_registers ()
1371 && target_has_stack ()
1372 && target_has_memory ())
1373 restore_selected_frame (m_selected_frame_id
, m_selected_frame_level
);
1375 set_language (m_lang
);
1378 scoped_restore_current_thread::~scoped_restore_current_thread ()
1380 if (!m_dont_restore
)
1384 scoped_restore_current_thread::scoped_restore_current_thread ()
1386 m_inf
= inferior_ref::new_reference (current_inferior ());
1388 m_lang
= current_language
->la_language
;
1390 if (inferior_ptid
!= null_ptid
)
1392 m_thread
= thread_info_ref::new_reference (inferior_thread ());
1394 m_was_stopped
= m_thread
->state
== THREAD_STOPPED
;
1395 save_selected_frame (&m_selected_frame_id
, &m_selected_frame_level
);
1399 /* See gdbthread.h. */
1402 show_thread_that_caused_stop (void)
1404 return highest_thread_num
> 1;
1407 /* See gdbthread.h. */
1410 show_inferior_qualified_tids (void)
1412 auto inf
= inferior_list
.begin ();
1416 return inf
!= inferior_list
.end ();
1419 /* See gdbthread.h. */
1422 print_thread_id (struct thread_info
*thr
)
1424 char *s
= get_print_cell ();
1426 if (show_inferior_qualified_tids ())
1427 xsnprintf (s
, PRINT_CELL_SIZE
, "%d.%d", thr
->inf
->num
, thr
->per_inf_num
);
1429 xsnprintf (s
, PRINT_CELL_SIZE
, "%d", thr
->per_inf_num
);
1433 /* Sort an array of struct thread_info pointers by thread ID (first by
1434 inferior number, and then by per-inferior thread number). Sorts in
1438 tp_array_compar_ascending (const thread_info_ref
&a
, const thread_info_ref
&b
)
1440 if (a
->inf
->num
!= b
->inf
->num
)
1441 return a
->inf
->num
< b
->inf
->num
;
1443 return (a
->per_inf_num
< b
->per_inf_num
);
1446 /* Sort an array of struct thread_info pointers by thread ID (first by
1447 inferior number, and then by per-inferior thread number). Sorts in
1448 descending order. */
1451 tp_array_compar_descending (const thread_info_ref
&a
, const thread_info_ref
&b
)
1453 if (a
->inf
->num
!= b
->inf
->num
)
1454 return a
->inf
->num
> b
->inf
->num
;
1456 return (a
->per_inf_num
> b
->per_inf_num
);
1459 /* See gdbthread.h. */
1462 thread_try_catch_cmd (thread_info
*thr
, gdb::optional
<int> ada_task
,
1463 const char *cmd
, int from_tty
,
1464 const qcs_flags
&flags
)
1466 gdb_assert (is_current_thread (thr
));
1468 /* The thread header is computed before running the command since
1469 the command can change the inferior, which is not permitted
1470 by thread_target_id_str. */
1471 std::string thr_header
;
1472 if (ada_task
.has_value ())
1473 thr_header
= string_printf (_("\nTask ID %d:\n"), *ada_task
);
1475 thr_header
= string_printf (_("\nThread %s (%s):\n"),
1476 print_thread_id (thr
),
1477 thread_target_id_str (thr
).c_str ());
1481 std::string cmd_result
;
1482 execute_command_to_string
1483 (cmd_result
, cmd
, from_tty
, gdb_stdout
->term_out ());
1484 if (!flags
.silent
|| cmd_result
.length () > 0)
1487 gdb_printf ("%s", thr_header
.c_str ());
1488 gdb_printf ("%s", cmd_result
.c_str ());
1491 catch (const gdb_exception_error
&ex
)
1496 gdb_printf ("%s", thr_header
.c_str ());
1498 gdb_printf ("%s\n", ex
.what ());
1505 /* Option definition of "thread apply"'s "-ascending" option. */
1507 static const gdb::option::flag_option_def
<> ascending_option_def
= {
1510 Call COMMAND for all threads in ascending order.\n\
1511 The default is descending order."),
1514 /* The qcs command line flags for the "thread apply" commands. Keep
1515 this in sync with the "frame apply" commands. */
1517 using qcs_flag_option_def
1518 = gdb::option::flag_option_def
<qcs_flags
>;
1520 static const gdb::option::option_def thr_qcs_flags_option_defs
[] = {
1521 qcs_flag_option_def
{
1522 "q", [] (qcs_flags
*opt
) { return &opt
->quiet
; },
1523 N_("Disables printing the thread information."),
1526 qcs_flag_option_def
{
1527 "c", [] (qcs_flags
*opt
) { return &opt
->cont
; },
1528 N_("Print any error raised by COMMAND and continue."),
1531 qcs_flag_option_def
{
1532 "s", [] (qcs_flags
*opt
) { return &opt
->silent
; },
1533 N_("Silently ignore any errors or empty output produced by COMMAND."),
1537 /* Create an option_def_group for the "thread apply all" options, with
1538 ASCENDING and FLAGS as context. */
1540 static inline std::array
<gdb::option::option_def_group
, 2>
1541 make_thread_apply_all_options_def_group (bool *ascending
,
1545 { {ascending_option_def
.def ()}, ascending
},
1546 { {thr_qcs_flags_option_defs
}, flags
},
1550 /* Create an option_def_group for the "thread apply" options, with
1551 FLAGS as context. */
1553 static inline gdb::option::option_def_group
1554 make_thread_apply_options_def_group (qcs_flags
*flags
)
1556 return {{thr_qcs_flags_option_defs
}, flags
};
1559 /* Apply a GDB command to a list of threads. List syntax is a whitespace
1560 separated list of numbers, or ranges, or the keyword `all'. Ranges consist
1561 of two numbers separated by a hyphen. Examples:
1563 thread apply 1 2 7 4 backtrace Apply backtrace cmd to threads 1,2,7,4
1564 thread apply 2-7 9 p foo(1) Apply p foo(1) cmd to threads 2->7 & 9
1565 thread apply all x/i $pc Apply x/i $pc cmd to all threads. */
1568 thread_apply_all_command (const char *cmd
, int from_tty
)
1570 bool ascending
= false;
1573 auto group
= make_thread_apply_all_options_def_group (&ascending
,
1575 gdb::option::process_options
1576 (&cmd
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, group
);
1578 validate_flags_qcs ("thread apply all", &flags
);
1580 if (cmd
== NULL
|| *cmd
== '\000')
1581 error (_("Please specify a command at the end of 'thread apply all'"));
1583 update_thread_list ();
1585 int tc
= live_threads_count ();
1588 /* Save a copy of the thread list and increment each thread's
1589 refcount while executing the command in the context of each
1590 thread, in case the command is one that wipes threads. E.g.,
1591 detach, kill, disconnect, etc., or even normally continuing
1592 over an inferior or thread exit. */
1593 std::vector
<thread_info_ref
> thr_list_cpy
;
1594 thr_list_cpy
.reserve (tc
);
1596 for (thread_info
*tp
: all_non_exited_threads ())
1597 thr_list_cpy
.push_back (thread_info_ref::new_reference (tp
));
1598 gdb_assert (thr_list_cpy
.size () == tc
);
1600 auto *sorter
= (ascending
1601 ? tp_array_compar_ascending
1602 : tp_array_compar_descending
);
1603 std::sort (thr_list_cpy
.begin (), thr_list_cpy
.end (), sorter
);
1605 scoped_restore_current_thread restore_thread
;
1607 for (thread_info_ref
&thr
: thr_list_cpy
)
1608 if (switch_to_thread_if_alive (thr
.get ()))
1609 thread_try_catch_cmd (thr
.get (), {}, cmd
, from_tty
, flags
);
1613 /* Completer for "thread apply [ID list]". */
1616 thread_apply_command_completer (cmd_list_element
*ignore
,
1617 completion_tracker
&tracker
,
1618 const char *text
, const char * /*word*/)
1620 /* Don't leave this to complete_options because there's an early
1622 tracker
.set_use_custom_word_point (true);
1624 tid_range_parser parser
;
1625 parser
.init (text
, current_inferior ()->num
);
1629 while (!parser
.finished ())
1631 int inf_num
, thr_start
, thr_end
;
1633 if (!parser
.get_tid_range (&inf_num
, &thr_start
, &thr_end
))
1636 if (parser
.in_star_range () || parser
.in_thread_range ())
1637 parser
.skip_range ();
1640 catch (const gdb_exception_error
&ex
)
1642 /* get_tid_range throws if it parses a negative number, for
1643 example. But a seemingly negative number may be the start of
1644 an option instead. */
1647 const char *cmd
= parser
.cur_tok ();
1651 /* No thread ID list yet. */
1655 /* Check if we're past a valid thread ID list already. */
1656 if (parser
.finished ()
1657 && cmd
> text
&& !isspace (cmd
[-1]))
1660 /* We're past the thread ID list, advance word point. */
1661 tracker
.advance_custom_word_point_by (cmd
- text
);
1664 const auto group
= make_thread_apply_options_def_group (nullptr);
1665 if (gdb::option::complete_options
1666 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, group
))
1669 complete_nested_command_line (tracker
, text
);
1672 /* Completer for "thread apply all". */
1675 thread_apply_all_command_completer (cmd_list_element
*ignore
,
1676 completion_tracker
&tracker
,
1677 const char *text
, const char *word
)
1679 const auto group
= make_thread_apply_all_options_def_group (nullptr,
1681 if (gdb::option::complete_options
1682 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, group
))
1685 complete_nested_command_line (tracker
, text
);
1688 /* Implementation of the "thread apply" command. */
1691 thread_apply_command (const char *tidlist
, int from_tty
)
1694 const char *cmd
= NULL
;
1695 tid_range_parser parser
;
1697 if (tidlist
== NULL
|| *tidlist
== '\000')
1698 error (_("Please specify a thread ID list"));
1700 parser
.init (tidlist
, current_inferior ()->num
);
1701 while (!parser
.finished ())
1703 int inf_num
, thr_start
, thr_end
;
1705 if (!parser
.get_tid_range (&inf_num
, &thr_start
, &thr_end
))
1709 cmd
= parser
.cur_tok ();
1711 auto group
= make_thread_apply_options_def_group (&flags
);
1712 gdb::option::process_options
1713 (&cmd
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND
, group
);
1715 validate_flags_qcs ("thread apply", &flags
);
1718 error (_("Please specify a command following the thread ID list"));
1720 if (tidlist
== cmd
|| isdigit (cmd
[0]))
1721 invalid_thread_id_error (cmd
);
1723 scoped_restore_current_thread restore_thread
;
1725 parser
.init (tidlist
, current_inferior ()->num
);
1726 while (!parser
.finished ())
1728 struct thread_info
*tp
= NULL
;
1729 struct inferior
*inf
;
1730 int inf_num
, thr_num
;
1732 parser
.get_tid (&inf_num
, &thr_num
);
1733 inf
= find_inferior_id (inf_num
);
1735 tp
= find_thread_id (inf
, thr_num
);
1737 if (parser
.in_star_range ())
1741 warning (_("Unknown inferior %d"), inf_num
);
1742 parser
.skip_range ();
1746 /* No use looking for threads past the highest thread number
1747 the inferior ever had. */
1748 if (thr_num
>= inf
->highest_thread_num
)
1749 parser
.skip_range ();
1751 /* Be quiet about unknown threads numbers. */
1758 if (show_inferior_qualified_tids () || parser
.tid_is_qualified ())
1759 warning (_("Unknown thread %d.%d"), inf_num
, thr_num
);
1761 warning (_("Unknown thread %d"), thr_num
);
1765 if (!switch_to_thread_if_alive (tp
))
1767 warning (_("Thread %s has terminated."), print_thread_id (tp
));
1771 thread_try_catch_cmd (tp
, {}, cmd
, from_tty
, flags
);
1776 /* Implementation of the "taas" command. */
1779 taas_command (const char *cmd
, int from_tty
)
1781 if (cmd
== NULL
|| *cmd
== '\0')
1782 error (_("Please specify a command to apply on all threads"));
1783 std::string expanded
= std::string ("thread apply all -s ") + cmd
;
1784 execute_command (expanded
.c_str (), from_tty
);
1787 /* Implementation of the "tfaas" command. */
1790 tfaas_command (const char *cmd
, int from_tty
)
1792 if (cmd
== NULL
|| *cmd
== '\0')
1793 error (_("Please specify a command to apply on all frames of all threads"));
1794 std::string expanded
1795 = std::string ("thread apply all -s -- frame apply all -s ") + cmd
;
1796 execute_command (expanded
.c_str (), from_tty
);
1799 /* Switch to the specified thread, or print the current thread. */
1802 thread_command (const char *tidstr
, int from_tty
)
1806 if (inferior_ptid
== null_ptid
)
1807 error (_("No thread selected"));
1809 if (target_has_stack ())
1811 struct thread_info
*tp
= inferior_thread ();
1813 if (tp
->state
== THREAD_EXITED
)
1814 gdb_printf (_("[Current thread is %s (%s) (exited)]\n"),
1815 print_thread_id (tp
),
1816 target_pid_to_str (inferior_ptid
).c_str ());
1818 gdb_printf (_("[Current thread is %s (%s)]\n"),
1819 print_thread_id (tp
),
1820 target_pid_to_str (inferior_ptid
).c_str ());
1823 error (_("No stack."));
1827 ptid_t previous_ptid
= inferior_ptid
;
1829 thread_select (tidstr
, parse_thread_id (tidstr
, NULL
));
1831 /* Print if the thread has not changed, otherwise an event will
1833 if (inferior_ptid
== previous_ptid
)
1835 print_selected_thread_frame (current_uiout
,
1836 USER_SELECTED_THREAD
1837 | USER_SELECTED_FRAME
);
1841 gdb::observers::user_selected_context_changed
.notify
1842 (USER_SELECTED_THREAD
| USER_SELECTED_FRAME
);
1847 /* Implementation of `thread name'. */
1850 thread_name_command (const char *arg
, int from_tty
)
1852 struct thread_info
*info
;
1854 if (inferior_ptid
== null_ptid
)
1855 error (_("No thread selected"));
1857 arg
= skip_spaces (arg
);
1859 info
= inferior_thread ();
1860 info
->set_name (arg
!= nullptr ? make_unique_xstrdup (arg
) : nullptr);
1863 /* Find thread ids with a name, target pid, or extra info matching ARG. */
1866 thread_find_command (const char *arg
, int from_tty
)
1869 unsigned long match
= 0;
1871 if (arg
== NULL
|| *arg
== '\0')
1872 error (_("Command requires an argument."));
1874 tmp
= re_comp (arg
);
1876 error (_("Invalid regexp (%s): %s"), tmp
, arg
);
1878 /* We're going to be switching threads. */
1879 scoped_restore_current_thread restore_thread
;
1881 update_thread_list ();
1883 for (thread_info
*tp
: all_threads ())
1885 switch_to_inferior_no_thread (tp
->inf
);
1887 if (tp
->name () != nullptr && re_exec (tp
->name ()))
1889 gdb_printf (_("Thread %s has name '%s'\n"),
1890 print_thread_id (tp
), tp
->name ());
1894 tmp
= target_thread_name (tp
);
1895 if (tmp
!= NULL
&& re_exec (tmp
))
1897 gdb_printf (_("Thread %s has target name '%s'\n"),
1898 print_thread_id (tp
), tmp
);
1902 std::string name
= target_pid_to_str (tp
->ptid
);
1903 if (!name
.empty () && re_exec (name
.c_str ()))
1905 gdb_printf (_("Thread %s has target id '%s'\n"),
1906 print_thread_id (tp
), name
.c_str ());
1910 tmp
= target_extra_thread_info (tp
);
1911 if (tmp
!= NULL
&& re_exec (tmp
))
1913 gdb_printf (_("Thread %s has extra info '%s'\n"),
1914 print_thread_id (tp
), tmp
);
1919 gdb_printf (_("No threads match '%s'\n"), arg
);
1922 /* Print notices when new threads are attached and detached. */
1923 bool print_thread_events
= true;
1925 show_print_thread_events (struct ui_file
*file
, int from_tty
,
1926 struct cmd_list_element
*c
, const char *value
)
1929 _("Printing of thread events is %s.\n"),
1933 /* See gdbthread.h. */
1936 thread_select (const char *tidstr
, thread_info
*tp
)
1938 if (!switch_to_thread_if_alive (tp
))
1939 error (_("Thread ID %s has terminated."), tidstr
);
1941 annotate_thread_changed ();
1943 /* Since the current thread may have changed, see if there is any
1944 exited thread we can now delete. */
1945 delete_exited_threads ();
1948 /* Print thread and frame switch command response. */
1951 print_selected_thread_frame (struct ui_out
*uiout
,
1952 user_selected_what selection
)
1954 struct thread_info
*tp
= inferior_thread ();
1956 if (selection
& USER_SELECTED_THREAD
)
1958 if (uiout
->is_mi_like_p ())
1960 uiout
->field_signed ("new-thread-id",
1961 inferior_thread ()->global_num
);
1965 uiout
->text ("[Switching to thread ");
1966 uiout
->field_string ("new-thread-id", print_thread_id (tp
));
1968 uiout
->text (target_pid_to_str (inferior_ptid
));
1973 if (tp
->state
== THREAD_RUNNING
)
1975 if (selection
& USER_SELECTED_THREAD
)
1976 uiout
->text ("(running)\n");
1978 else if (selection
& USER_SELECTED_FRAME
)
1980 if (selection
& USER_SELECTED_THREAD
)
1983 if (has_stack_frames ())
1984 print_stack_frame_to_uiout (uiout
, get_selected_frame (NULL
),
1989 /* Update the 'threads_executing' global based on the threads we know
1990 about right now. This is used by infrun to tell whether we should
1991 pull events out of the current target. */
1994 update_threads_executing (void)
1996 process_stratum_target
*targ
= current_inferior ()->process_target ();
2001 targ
->threads_executing
= false;
2003 for (inferior
*inf
: all_non_exited_inferiors (targ
))
2005 if (!inf
->has_execution ())
2008 /* If the process has no threads, then it must be we have a
2009 process-exit event pending. */
2010 if (inf
->thread_list
.empty ())
2012 targ
->threads_executing
= true;
2016 for (thread_info
*tp
: inf
->non_exited_threads ())
2018 if (tp
->executing ())
2020 targ
->threads_executing
= true;
2028 update_thread_list (void)
2030 target_update_thread_list ();
2031 update_threads_executing ();
2034 /* See gdbthread.h. */
2037 thread_name (thread_info
*thread
)
2039 /* Use the manually set name if there is one. */
2040 const char *name
= thread
->name ();
2041 if (name
!= nullptr)
2044 /* Otherwise, ask the target. Ensure we query the right target stack. */
2045 scoped_restore_current_thread restore_thread
;
2046 if (thread
->inf
!= current_inferior ())
2047 switch_to_inferior_no_thread (thread
->inf
);
2049 return target_thread_name (thread
);
2052 /* See gdbthread.h. */
2055 thread_state_string (enum thread_state state
)
2059 case THREAD_STOPPED
:
2062 case THREAD_RUNNING
:
2069 gdb_assert_not_reached ("unknown thread state");
2072 /* Return a new value for the selected thread's id. Return a value of
2073 0 if no thread is selected. If GLOBAL is true, return the thread's
2074 global number. Otherwise return the per-inferior number. */
2076 static struct value
*
2077 thread_num_make_value_helper (struct gdbarch
*gdbarch
, int global
)
2081 if (inferior_ptid
== null_ptid
)
2085 thread_info
*tp
= inferior_thread ();
2087 int_val
= tp
->global_num
;
2089 int_val
= tp
->per_inf_num
;
2092 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, int_val
);
2095 /* Return a new value for the selected thread's per-inferior thread
2096 number. Return a value of 0 if no thread is selected, or no
2099 static struct value
*
2100 thread_id_per_inf_num_make_value (struct gdbarch
*gdbarch
,
2101 struct internalvar
*var
,
2104 return thread_num_make_value_helper (gdbarch
, 0);
2107 /* Return a new value for the selected thread's global id. Return a
2108 value of 0 if no thread is selected, or no threads exist. */
2110 static struct value
*
2111 global_thread_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
2114 return thread_num_make_value_helper (gdbarch
, 1);
2117 /* Commands with a prefix of `thread'. */
2118 struct cmd_list_element
*thread_cmd_list
= NULL
;
2120 /* Implementation of `thread' variable. */
2122 static const struct internalvar_funcs thread_funcs
=
2124 thread_id_per_inf_num_make_value
,
2128 /* Implementation of `gthread' variable. */
2130 static const struct internalvar_funcs gthread_funcs
=
2132 global_thread_id_make_value
,
2136 void _initialize_thread ();
2138 _initialize_thread ()
2140 static struct cmd_list_element
*thread_apply_list
= NULL
;
2141 cmd_list_element
*c
;
2143 const auto info_threads_opts
= make_info_threads_options_def_group (nullptr);
2145 /* Note: keep this "ID" in sync with what "info threads [TAB]"
2147 static std::string info_threads_help
2148 = gdb::option::build_help (_("\
2149 Display currently known threads.\n\
2150 Usage: info threads [OPTION]... [ID]...\n\
2151 If ID is given, it is a space-separated list of IDs of threads to display.\n\
2152 Otherwise, all threads are displayed.\n\
2158 c
= add_info ("threads", info_threads_command
, info_threads_help
.c_str ());
2159 set_cmd_completer_handle_brkchars (c
, info_threads_command_completer
);
2161 cmd_list_element
*thread_cmd
2162 = add_prefix_cmd ("thread", class_run
, thread_command
, _("\
2163 Use this command to switch between threads.\n\
2164 The new thread ID must be currently known."),
2165 &thread_cmd_list
, 1, &cmdlist
);
2167 add_com_alias ("t", thread_cmd
, class_run
, 1);
2169 #define THREAD_APPLY_OPTION_HELP "\
2170 Prints per-inferior thread number and target system's thread id\n\
2171 followed by COMMAND output.\n\
2173 By default, an error raised during the execution of COMMAND\n\
2174 aborts \"thread apply\".\n\
2179 const auto thread_apply_opts
= make_thread_apply_options_def_group (nullptr);
2181 static std::string thread_apply_help
= gdb::option::build_help (_("\
2182 Apply a command to a list of threads.\n\
2183 Usage: thread apply ID... [OPTION]... COMMAND\n\
2184 ID is a space-separated list of IDs of threads to apply COMMAND on.\n"
2185 THREAD_APPLY_OPTION_HELP
),
2188 c
= add_prefix_cmd ("apply", class_run
, thread_apply_command
,
2189 thread_apply_help
.c_str (),
2190 &thread_apply_list
, 1,
2192 set_cmd_completer_handle_brkchars (c
, thread_apply_command_completer
);
2194 const auto thread_apply_all_opts
2195 = make_thread_apply_all_options_def_group (nullptr, nullptr);
2197 static std::string thread_apply_all_help
= gdb::option::build_help (_("\
2198 Apply a command to all threads.\n\
2200 Usage: thread apply all [OPTION]... COMMAND\n"
2201 THREAD_APPLY_OPTION_HELP
),
2202 thread_apply_all_opts
);
2204 c
= add_cmd ("all", class_run
, thread_apply_all_command
,
2205 thread_apply_all_help
.c_str (),
2206 &thread_apply_list
);
2207 set_cmd_completer_handle_brkchars (c
, thread_apply_all_command_completer
);
2209 c
= add_com ("taas", class_run
, taas_command
, _("\
2210 Apply a command to all threads (ignoring errors and empty output).\n\
2211 Usage: taas [OPTION]... COMMAND\n\
2212 shortcut for 'thread apply all -s [OPTION]... COMMAND'\n\
2213 See \"help thread apply all\" for available options."));
2214 set_cmd_completer_handle_brkchars (c
, thread_apply_all_command_completer
);
2216 c
= add_com ("tfaas", class_run
, tfaas_command
, _("\
2217 Apply a command to all frames of all threads (ignoring errors and empty output).\n\
2218 Usage: tfaas [OPTION]... COMMAND\n\
2219 shortcut for 'thread apply all -s -- frame apply all -s [OPTION]... COMMAND'\n\
2220 See \"help frame apply all\" for available options."));
2221 set_cmd_completer_handle_brkchars (c
, frame_apply_all_cmd_completer
);
2223 add_cmd ("name", class_run
, thread_name_command
,
2224 _("Set the current thread's name.\n\
2225 Usage: thread name [NAME]\n\
2226 If NAME is not given, then any existing name is removed."), &thread_cmd_list
);
2228 add_cmd ("find", class_run
, thread_find_command
, _("\
2229 Find threads that match a regular expression.\n\
2230 Usage: thread find REGEXP\n\
2231 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
2234 add_setshow_boolean_cmd ("thread-events", no_class
,
2235 &print_thread_events
, _("\
2236 Set printing of thread events (such as thread start and exit)."), _("\
2237 Show printing of thread events (such as thread start and exit)."), NULL
,
2239 show_print_thread_events
,
2240 &setprintlist
, &showprintlist
);
2242 add_setshow_boolean_cmd ("threads", class_maintenance
, &debug_threads
, _("\
2243 Set thread debugging."), _("\
2244 Show thread debugging."), _("\
2245 When on messages about thread creation and deletion are printed."),
2248 &setdebuglist
, &showdebuglist
);
2250 create_internalvar_type_lazy ("_thread", &thread_funcs
, NULL
);
2251 create_internalvar_type_lazy ("_gthread", >hread_funcs
, NULL
);