diff options
author | Andrew Burgess <aburgess@redhat.com> | 2022-01-11 17:31:16 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2022-01-13 10:13:16 +0000 |
commit | 993248f4439271d7d5d3b504b851043af7495c25 (patch) | |
tree | a9876640edb51cd02e4ff247bf7777cbfa3dd5a5 /gdb | |
parent | 1ffce3f87dc6e62d49b5aaa0bc29c6d4cfbc6db6 (diff) | |
download | gdb-993248f4439271d7d5d3b504b851043af7495c25.zip gdb-993248f4439271d7d5d3b504b851043af7495c25.tar.gz gdb-993248f4439271d7d5d3b504b851043af7495c25.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-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. */ |