aboutsummaryrefslogtreecommitdiff
path: root/gdb/breakpoint.c
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2022-10-04 13:51:46 +0100
committerAndrew Burgess <aburgess@redhat.com>2022-10-06 10:01:15 +0100
commitd8a77e4c8043c645c3c7a07a042c112053715e95 (patch)
tree24827b2bd61b90c27bc774ea36ad35951e7156bc /gdb/breakpoint.c
parent07443de62b709f91ab9ffe745e53203b7dc02031 (diff)
downloadfsf-binutils-gdb-d8a77e4c8043c645c3c7a07a042c112053715e95.zip
fsf-binutils-gdb-d8a77e4c8043c645c3c7a07a042c112053715e95.tar.gz
fsf-binutils-gdb-d8a77e4c8043c645c3c7a07a042c112053715e95.tar.bz2
gdb: more infrun debug from breakpoint.c
This commit adds additional infrun debug from the breakpoint.c file. The new debug output all relates to breakpoint condition evaluation. There is already some infrun debug emitted from the breakpoint.c file, so hopefully, adding more will not be contentious. I think the functions being instrumented make sense as part of the infrun process, the inferior stops, evaluates the condition, and then either stops or continues. This new debug gives more insight into that process. I had to make the bp_location* argument to find_loc_num_by_location const, and add a declaration for find_loc_num_by_location. There should be no user visible changes unless they turn on debug output.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r--gdb/breakpoint.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index c8c3412..29a0294 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -161,6 +161,8 @@ static std::vector<symtab_and_line> bkpt_probe_decode_location_spec
static bool bl_address_is_meaningful (bp_location *loc);
+static int find_loc_num_by_location (const bp_location *loc);
+
/* update_global_location_list's modes of operation wrt to whether to
insert locations now. */
enum ugll_insert_mode
@@ -5298,6 +5300,8 @@ bpstat_check_watchpoint (bpstat *bs)
static void
bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
{
+ INFRUN_SCOPED_DEBUG_ENTER_EXIT;
+
const struct bp_location *bl;
struct breakpoint *b;
/* Assume stop. */
@@ -5312,6 +5316,10 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
b = bs->breakpoint_at;
gdb_assert (b != NULL);
+ infrun_debug_printf ("thread = %s, breakpoint %d.%d",
+ thread->ptid.to_string ().c_str (),
+ b->number, find_loc_num_by_location (bl));
+
/* Even if the target evaluated the condition on its end and notified GDB, we
need to do so again since GDB does not know if we stopped due to a
breakpoint or a single step breakpoint. */
@@ -5319,6 +5327,9 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
if (frame_id_p (b->frame_id)
&& !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
{
+ infrun_debug_printf ("incorrect frame %s not %s, not stopping",
+ get_stack_frame_id (get_current_frame ()).to_string ().c_str (),
+ b->frame_id.to_string ().c_str ());
bs->stop = 0;
return;
}
@@ -5329,6 +5340,7 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
if ((b->thread != -1 && b->thread != thread->global_num)
|| (b->task != 0 && b->task != ada_get_task_number (thread)))
{
+ infrun_debug_printf ("incorrect thread or task, not stopping");
bs->stop = 0;
return;
}
@@ -5420,16 +5432,26 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
if (cond && !condition_result)
{
+ infrun_debug_printf ("condition_result = false, not stopping");
bs->stop = 0;
+ return;
}
else if (b->ignore_count > 0)
{
+ infrun_debug_printf ("ignore count %d, not stopping",
+ b->ignore_count);
b->ignore_count--;
bs->stop = 0;
/* Increase the hit count even though we don't stop. */
++(b->hit_count);
gdb::observers::breakpoint_modified.notify (b);
- }
+ return;
+ }
+
+ if (bs->stop)
+ infrun_debug_printf ("stopping at this breakpoint");
+ else
+ infrun_debug_printf ("not stopping at this breakpoint");
}
/* Returns true if we need to track moribund locations of LOC's type
@@ -13142,7 +13164,7 @@ enable_disable_bp_num_loc (int bp_num, int loc_num, bool enable)
owner. 1-based indexing. -1 signals NOT FOUND. */
static int
-find_loc_num_by_location (bp_location *loc)
+find_loc_num_by_location (const bp_location *loc)
{
if (loc != nullptr && loc->owner != nullptr)
{