diff options
-rw-r--r-- | gdb/gdbthread.h | 4 | ||||
-rw-r--r-- | gdb/infcmd.c | 12 | ||||
-rw-r--r-- | gdb/thread.c | 20 |
3 files changed, 36 insertions, 0 deletions
diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 5350a42..9921dae 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 8bf5801..9f4ed8b 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 8a7d142..c43f661 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. */ |