From: Andrew Burgess Date: Tue, 11 Jan 2022 17:31:16 +0000 (+0000) Subject: gdb: add some extra debug information to attach_command X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=993248f4439271d7d5d3b504b851043af7495c25;p=binutils-gdb.git gdb: add some extra debug information to attach_command While working on another patch I wanted to add some extra debug information to the attach_command function. This required me to add a new function to convert the thread_info::state variable to a string. The new debug might be useful to others, and the state to string function might be useful in other locations, so I thought I'd merge it. --- diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 5350a42f1bb..9921dae7a71 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -1003,4 +1003,8 @@ extern void thread_try_catch_cmd (thread_info *thr, const char *cmd, int from_tty, const qcs_flags &flags); +/* Return a string representation of STATE. */ + +extern const char *thread_state_string (enum thread_state state); + #endif /* GDBTHREAD_H */ diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 8bf58018bdd..9f4ed8bff13 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2541,6 +2541,18 @@ attach_command (const char *args, int from_tty) shouldn't refer to attach_target again. */ attach_target = NULL; + if (debug_infrun) + { + infrun_debug_printf ("immediately after attach:"); + for (thread_info *thread : inferior->non_exited_threads ()) + infrun_debug_printf (" thread %s, executing = %d, resumed = %d, " + "state = %s", + thread->ptid.to_string ().c_str (), + thread->executing (), + thread->resumed (), + thread_state_string (thread->state)); + } + /* Set up the "saved terminal modes" of the inferior based on what modes we are starting it with. */ target_terminal::init (); diff --git a/gdb/thread.c b/gdb/thread.c index 8a7d142bab5..c43f6613145 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -2050,6 +2050,26 @@ thread_name (thread_info *thread) return target_thread_name (thread); } +/* See gdbthread.h. */ + +const char * +thread_state_string (enum thread_state state) +{ + switch (state) + { + case THREAD_STOPPED: + return "STOPPED"; + + case THREAD_RUNNING: + return "RUNNING"; + + case THREAD_EXITED: + return "EXITED"; + } + + gdb_assert_not_reached ("unknown thread state"); +} + /* Return a new value for the selected thread's id. Return a value of 0 if no thread is selected. If GLOBAL is true, return the thread's global number. Otherwise return the per-inferior number. */