mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-21 01:07:07 +08:00
gdb: additional debug output in infrun.c and linux-nat.c
While working on some of the recent patches relating to vfork handling I found this debug output very helpful, I'd like to propose adding this into GDB. With debug turned off there should be no user visible changes after this commit.
This commit is contained in:
28
gdb/infrun.c
28
gdb/infrun.c
@ -435,6 +435,11 @@ show_follow_fork_mode_string (struct ui_file *file, int from_tty,
|
|||||||
static bool
|
static bool
|
||||||
follow_fork_inferior (bool follow_child, bool detach_fork)
|
follow_fork_inferior (bool follow_child, bool detach_fork)
|
||||||
{
|
{
|
||||||
|
INFRUN_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
|
infrun_debug_printf ("follow_child = %d, detach_fork = %d",
|
||||||
|
follow_child, detach_fork);
|
||||||
|
|
||||||
target_waitkind fork_kind = inferior_thread ()->pending_follow.kind ();
|
target_waitkind fork_kind = inferior_thread ()->pending_follow.kind ();
|
||||||
gdb_assert (fork_kind == TARGET_WAITKIND_FORKED
|
gdb_assert (fork_kind == TARGET_WAITKIND_FORKED
|
||||||
|| fork_kind == TARGET_WAITKIND_VFORKED);
|
|| fork_kind == TARGET_WAITKIND_VFORKED);
|
||||||
@ -543,6 +548,13 @@ holding the child stopped. Try \"set detach-on-fork\" or \
|
|||||||
parent_inf->thread_waiting_for_vfork_done
|
parent_inf->thread_waiting_for_vfork_done
|
||||||
= detach_fork ? inferior_thread () : nullptr;
|
= detach_fork ? inferior_thread () : nullptr;
|
||||||
parent_inf->pspace->breakpoints_not_allowed = detach_fork;
|
parent_inf->pspace->breakpoints_not_allowed = detach_fork;
|
||||||
|
|
||||||
|
infrun_debug_printf
|
||||||
|
("parent_inf->thread_waiting_for_vfork_done == %s",
|
||||||
|
(parent_inf->thread_waiting_for_vfork_done == nullptr
|
||||||
|
? "nullptr"
|
||||||
|
: (parent_inf->thread_waiting_for_vfork_done
|
||||||
|
->ptid.to_string ().c_str ())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -727,6 +739,8 @@ set_last_target_status_stopped (thread_info *tp)
|
|||||||
static bool
|
static bool
|
||||||
follow_fork ()
|
follow_fork ()
|
||||||
{
|
{
|
||||||
|
INFRUN_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
bool follow_child = (follow_fork_mode_string == follow_fork_mode_child);
|
bool follow_child = (follow_fork_mode_string == follow_fork_mode_child);
|
||||||
bool should_resume = true;
|
bool should_resume = true;
|
||||||
|
|
||||||
@ -996,6 +1010,8 @@ proceed_after_vfork_done (thread_info *thread)
|
|||||||
static void
|
static void
|
||||||
handle_vfork_child_exec_or_exit (int exec)
|
handle_vfork_child_exec_or_exit (int exec)
|
||||||
{
|
{
|
||||||
|
INFRUN_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
struct inferior *inf = current_inferior ();
|
struct inferior *inf = current_inferior ();
|
||||||
|
|
||||||
if (inf->vfork_parent)
|
if (inf->vfork_parent)
|
||||||
@ -1127,6 +1143,8 @@ handle_vfork_child_exec_or_exit (int exec)
|
|||||||
static void
|
static void
|
||||||
handle_vfork_done (thread_info *event_thread)
|
handle_vfork_done (thread_info *event_thread)
|
||||||
{
|
{
|
||||||
|
INFRUN_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
/* We only care about this event if inferior::thread_waiting_for_vfork_done is
|
/* We only care about this event if inferior::thread_waiting_for_vfork_done is
|
||||||
set, that is if we are waiting for a vfork child not under our control
|
set, that is if we are waiting for a vfork child not under our control
|
||||||
(because we detached it) to exec or exit.
|
(because we detached it) to exec or exit.
|
||||||
@ -1142,8 +1160,6 @@ handle_vfork_done (thread_info *event_thread)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
INFRUN_SCOPED_DEBUG_ENTER_EXIT;
|
|
||||||
|
|
||||||
/* We stopped all threads (other than the vforking thread) of the inferior in
|
/* We stopped all threads (other than the vforking thread) of the inferior in
|
||||||
follow_fork and kept them stopped until now. It should therefore not be
|
follow_fork and kept them stopped until now. It should therefore not be
|
||||||
possible for another thread to have reported a vfork during that window.
|
possible for another thread to have reported a vfork during that window.
|
||||||
@ -3407,6 +3423,8 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
|
|||||||
|
|
||||||
thread_info *cur_thr = inferior_thread ();
|
thread_info *cur_thr = inferior_thread ();
|
||||||
|
|
||||||
|
infrun_debug_printf ("cur_thr = %s", cur_thr->ptid.to_string ().c_str ());
|
||||||
|
|
||||||
/* Fill in with reasonable starting values. */
|
/* Fill in with reasonable starting values. */
|
||||||
init_thread_stepping_state (cur_thr);
|
init_thread_stepping_state (cur_thr);
|
||||||
|
|
||||||
@ -3463,8 +3481,10 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal)
|
|||||||
if (!cur_thr->control.in_infcall)
|
if (!cur_thr->control.in_infcall)
|
||||||
set_running (resume_target, resume_ptid, true);
|
set_running (resume_target, resume_ptid, true);
|
||||||
|
|
||||||
infrun_debug_printf ("addr=%s, signal=%s", paddress (gdbarch, addr),
|
infrun_debug_printf ("addr=%s, signal=%s, resume_ptid=%s",
|
||||||
gdb_signal_to_symbol_string (siggnal));
|
paddress (gdbarch, addr),
|
||||||
|
gdb_signal_to_symbol_string (siggnal),
|
||||||
|
resume_ptid.to_string ().c_str ());
|
||||||
|
|
||||||
annotate_starting ();
|
annotate_starting ();
|
||||||
|
|
||||||
|
@ -1293,6 +1293,11 @@ get_detach_signal (struct lwp_info *lp)
|
|||||||
static void
|
static void
|
||||||
detach_one_lwp (struct lwp_info *lp, int *signo_p)
|
detach_one_lwp (struct lwp_info *lp, int *signo_p)
|
||||||
{
|
{
|
||||||
|
LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
|
linux_nat_debug_printf ("lwp %s (stopped = %d)",
|
||||||
|
lp->ptid.to_string ().c_str (), lp->stopped);
|
||||||
|
|
||||||
int lwpid = lp->ptid.lwp ();
|
int lwpid = lp->ptid.lwp ();
|
||||||
int signo;
|
int signo;
|
||||||
|
|
||||||
@ -1363,6 +1368,10 @@ detach_one_lwp (struct lwp_info *lp, int *signo_p)
|
|||||||
else
|
else
|
||||||
signo = *signo_p;
|
signo = *signo_p;
|
||||||
|
|
||||||
|
linux_nat_debug_printf ("preparing to resume lwp %s (stopped = %d)",
|
||||||
|
lp->ptid.to_string ().c_str (),
|
||||||
|
lp->stopped);
|
||||||
|
|
||||||
/* Preparing to resume may try to write registers, and fail if the
|
/* Preparing to resume may try to write registers, and fail if the
|
||||||
lwp is zombie. If that happens, ignore the error. We'll handle
|
lwp is zombie. If that happens, ignore the error. We'll handle
|
||||||
it below, when detach fails with ESRCH. */
|
it below, when detach fails with ESRCH. */
|
||||||
@ -1395,6 +1404,8 @@ detach_callback (struct lwp_info *lp)
|
|||||||
void
|
void
|
||||||
linux_nat_target::detach (inferior *inf, int from_tty)
|
linux_nat_target::detach (inferior *inf, int from_tty)
|
||||||
{
|
{
|
||||||
|
LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
struct lwp_info *main_lwp;
|
struct lwp_info *main_lwp;
|
||||||
int pid = inf->pid;
|
int pid = inf->pid;
|
||||||
|
|
||||||
@ -3122,13 +3133,13 @@ static ptid_t
|
|||||||
linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
|
linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
|
||||||
target_wait_flags target_options)
|
target_wait_flags target_options)
|
||||||
{
|
{
|
||||||
|
LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
sigset_t prev_mask;
|
sigset_t prev_mask;
|
||||||
enum resume_kind last_resume_kind;
|
enum resume_kind last_resume_kind;
|
||||||
struct lwp_info *lp;
|
struct lwp_info *lp;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
linux_nat_debug_printf ("enter");
|
|
||||||
|
|
||||||
/* The first time we get here after starting a new inferior, we may
|
/* The first time we get here after starting a new inferior, we may
|
||||||
not have added it to the LWP list yet - this is the earliest
|
not have added it to the LWP list yet - this is the earliest
|
||||||
moment at which we know its PID. */
|
moment at which we know its PID. */
|
||||||
@ -3228,7 +3239,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
|
|||||||
|
|
||||||
if (target_options & TARGET_WNOHANG)
|
if (target_options & TARGET_WNOHANG)
|
||||||
{
|
{
|
||||||
linux_nat_debug_printf ("exit (ignore)");
|
linux_nat_debug_printf ("no interesting events found");
|
||||||
|
|
||||||
ourstatus->set_ignore ();
|
ourstatus->set_ignore ();
|
||||||
restore_child_signals_mask (&prev_mask);
|
restore_child_signals_mask (&prev_mask);
|
||||||
@ -3314,7 +3325,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
|
|||||||
else
|
else
|
||||||
*ourstatus = host_status_to_waitstatus (status);
|
*ourstatus = host_status_to_waitstatus (status);
|
||||||
|
|
||||||
linux_nat_debug_printf ("exit");
|
linux_nat_debug_printf ("event found");
|
||||||
|
|
||||||
restore_child_signals_mask (&prev_mask);
|
restore_child_signals_mask (&prev_mask);
|
||||||
|
|
||||||
@ -3410,6 +3421,8 @@ ptid_t
|
|||||||
linux_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
|
linux_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
|
||||||
target_wait_flags target_options)
|
target_wait_flags target_options)
|
||||||
{
|
{
|
||||||
|
LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
ptid_t event_ptid;
|
ptid_t event_ptid;
|
||||||
|
|
||||||
linux_nat_debug_printf ("[%s], [%s]", ptid.to_string ().c_str (),
|
linux_nat_debug_printf ("[%s], [%s]", ptid.to_string ().c_str (),
|
||||||
@ -3589,6 +3602,8 @@ linux_nat_target::kill ()
|
|||||||
void
|
void
|
||||||
linux_nat_target::mourn_inferior ()
|
linux_nat_target::mourn_inferior ()
|
||||||
{
|
{
|
||||||
|
LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT;
|
||||||
|
|
||||||
int pid = inferior_ptid.pid ();
|
int pid = inferior_ptid.pid ();
|
||||||
|
|
||||||
purge_lwp_list (pid);
|
purge_lwp_list (pid);
|
||||||
|
Reference in New Issue
Block a user