From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by sourceware.org (Postfix) with ESMTPS id CD8913858C83 for ; Tue, 21 Feb 2023 09:05:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CD8913858C83 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676970326; x=1708506326; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=HJdPMhkFxh6CWtOEPU+ec7JqGlHwO3n5QfMlU6uzX9s=; b=OZ7DlzHUonxZ2e/TRWQj40OouziYwvxYWVKhUOArT4oO31oOhPY5f/j0 s3INuNkR4aqmTdEWJgm0YYIK5Y2bpaG09ytZSnSTFltCT3SUAeXDoI8Tt C6XUrVbJ2zco1MhdkUiq1OL5oUDLgRv+udahPmkBHwCi0d4kKGcetPBbP bq8Er8/4LaW/Ypozqrx6N/yfTTGCzodQG+AQagUYBDVr/y49Cfu6NZHoE KezkV9pqSdH8xRik4fRKlgiUG+R5Z/jbWAk/GPGQG33Iwg6Az1LCrq1zn GCTomTDdXwYgES8O+RdyzGySi+cycSgi3BktQXtgtBCdtisX0ur7PvkKn Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10627"; a="397267963" X-IronPort-AV: E=Sophos;i="5.97,315,1669104000"; d="scan'208";a="397267963" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Feb 2023 01:05:26 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10627"; a="664903601" X-IronPort-AV: E=Sophos;i="5.97,315,1669104000"; d="scan'208";a="664903601" Received: from labpc2315.iul.intel.com (HELO localhost) ([172.28.50.57]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Feb 2023 01:05:25 -0800 From: Christina Schimpe To: gdb-patches@sourceware.org Subject: [PATCH 1/1] gdb, breakpoint: add breakpoint location debugging logs Date: Tue, 21 Feb 2023 10:05:01 +0100 Message-Id: <20230221090501.1487842-2-christina.schimpe@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230221090501.1487842-1-christina.schimpe@intel.com> References: <20230221090501.1487842-1-christina.schimpe@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: From: Mihails Strasuns Add new commands: set debug breakpoints on|off show debug breakpoints This patch introduces new debugging information that prints breakpoint location insertion and removal flow. The debug output looks like: ~~~ (gdb) set debug breakpoints on (gdb) disassemble main Dump of assembler code for function main: 0x0000555555555129 <+0>: endbr64 0x000055555555512d <+4>: push %rbp 0x000055555555512e <+5>: mov %rsp,%rbp => 0x0000555555555131 <+8>: mov $0x0,%eax 0x0000555555555136 <+13>: pop %rbp 0x0000555555555137 <+14>: ret End of assembler dump. (gdb) break *0x0000555555555137 Breakpoint 2 at 0x555555555137: file main.c, line 4. [breakpoints] update_global_location_list: UGLL_MAY_INSERT (gdb) c Continuing. [breakpoints] update_global_location_list: UGLL_INSERT [breakpoints] insert_bp_location: bp_location (0x562881637fb0) at address 0x555555555137 in main at main.c:4 [breakpoints] insert_bp_location: bp_location (0x56288179a4f0) at address 0x7ffff7fd37b5 [breakpoints] insert_bp_location: bp_location (0x56288179ea60) at address 0x7ffff7fe509e [breakpoints] insert_bp_location: bp_location (0x5628817184d0) at address 0x7ffff7fe63f4 <_dl_close_worker+2356> [breakpoints] remove_breakpoint_1: bp_location (0x562881637fb0) due to regular remove at address 0x555555555137 in main at main.c:4 [breakpoints] remove_breakpoint_1: bp_location (0x56288179a4f0) due to regular remove at address 0x7ffff7fd37b5 [breakpoints] remove_breakpoint_1: bp_location (0x56288179ea60) due to regular remove at address 0x7ffff7fe509e [breakpoints] remove_breakpoint_1: bp_location (0x5628817184d0) due to regular remove at address 0x7ffff7fe63f4 <_dl_close_worker+2356> Breakpoint 2, 0x0000555555555137 in main () at main.c:4 4 } ~~~ Co-Authored-By: Christina Schimpe --- gdb/NEWS | 4 +++ gdb/breakpoint.c | 66 +++++++++++++++++++++++++++++++++++++++++++++ gdb/doc/gdb.texinfo | 8 ++++++ 3 files changed, 78 insertions(+) diff --git a/gdb/NEWS b/gdb/NEWS index 75cd11b204e..f64e0a68c85 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -3,6 +3,10 @@ *** Changes since GDB 13 +* set debug breakpoints on|off + show debug breakpoints + Print additional debug messages about breakpoint insertion and removal. + * Multi-target feature configuration GDB now supports the individual configuration of remote targets' feature diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 0db3adaf916..1c8a05c6cbd 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -163,6 +163,8 @@ static bool bl_address_is_meaningful (bp_location *loc); static int find_loc_num_by_location (const bp_location *loc); +static std::string breakpoint_location_to_buffer (bp_location *bl); + /* update_global_location_list's modes of operation wrt to whether to insert locations now. */ enum ugll_insert_mode @@ -198,6 +200,22 @@ enum ugll_insert_mode UGLL_INSERT }; +static const char * +ugll_insert_mode_text (ugll_insert_mode insert_mode) +{ + switch (insert_mode) + { + case UGLL_DONT_INSERT: + return "UGLL_DONT_INSERT"; + case UGLL_MAY_INSERT: + return "UGLL_MAY_INSERT"; + case UGLL_INSERT: + return "UGLL_INSERT"; + } + + gdb_assert_not_reached ("must handle all enum values"); +} + static void update_global_location_list (enum ugll_insert_mode); static void update_global_location_list_nothrow (enum ugll_insert_mode); @@ -508,6 +526,19 @@ show_always_inserted_mode (struct ui_file *file, int from_tty, value); } +static bool debug_breakpoints = 0; + +#define breakpoint_debug_printf(fmt, ...) \ + debug_prefixed_printf_cond (debug_breakpoints, "breakpoints",fmt,\ + ##__VA_ARGS__) + +static void +show_debug_breakpoints (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + gdb_printf (file, _("Breakpoint location debugging is %s.\n"), value); +} + /* See breakpoint.h. */ int @@ -2710,6 +2741,11 @@ insert_bp_location (struct bp_location *bl, if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update)) return 0; + breakpoint_debug_printf ("bp_location (%s) at address %s %s", + host_address_to_string (bl), + paddress (bl->gdbarch, bl->address), + breakpoint_location_to_buffer (bl).c_str ()); + /* Note we don't initialize bl->target_info, as that wipes out the breakpoint location's shadow_contents if the breakpoint is still inserted at that location. This in turn breaks @@ -3270,6 +3306,8 @@ remove_breakpoints_inf (inferior *inf) { int val; + breakpoint_debug_printf ("remove_breakpoints_inf (%d)", inf->num); + for (bp_location *bl : all_bp_locations ()) { if (bl->pspace != inf->pspace) @@ -3914,6 +3952,13 @@ detach_breakpoints (ptid_t ptid) static int remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason) { + breakpoint_debug_printf ("bp_location (%s) due to %s at address %s %s", + host_address_to_string (bl), + (reason == REMOVE_BREAKPOINT + ? "regular remove" : "detach"), + paddress (bl->gdbarch, bl->address), + breakpoint_location_to_buffer (bl).c_str ()); + int val; /* BL is never in moribund_locations by our callers. */ @@ -6216,6 +6261,16 @@ print_breakpoint_location (const breakpoint *b, } } +static std::string +breakpoint_location_to_buffer (bp_location *bl) +{ + string_file stb; + current_uiout->redirect (&stb); + print_breakpoint_location (bl->owner, bl); + current_uiout->redirect (nullptr); + return stb.string (); +} + static const char * bptype_string (enum bptype type) { @@ -11146,6 +11201,8 @@ update_global_location_list (enum ugll_insert_mode insert_mode) /* Last breakpoint location program space that was marked for update. */ int last_pspace_num = -1; + breakpoint_debug_printf ("%s", ugll_insert_mode_text (insert_mode)); + /* Used in the duplicates detection below. When iterating over all bp_locations, points to the first bp_location of a given address. Breakpoints and watchpoints of different types are never @@ -14876,6 +14933,15 @@ when execution stops."), &breakpoint_set_cmdlist, &breakpoint_show_cmdlist); + add_setshow_boolean_cmd ("breakpoints", class_maintenance, + &debug_breakpoints, _("\ +Set breakpoint location debugging."), _("\ +Show breakpoint location debugging."), _("\ +When non-zero, breakpoint location specific debugging is enabled."), + NULL, + show_debug_breakpoints, + &setdebuglist, &showdebuglist); + add_setshow_enum_cmd ("condition-evaluation", class_breakpoint, condition_evaluation_enums, &condition_evaluation_mode_1, _("\ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 2a2077c29d1..cf33bd351b1 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -28272,6 +28272,14 @@ debugging info. Turn on or off debugging messages for built-in XML parsers. @item show debug xml Displays the current state of XML debugging messages. + +@item set debug breakpoints +@cindex breakpoint debugging info +Turns on or off display of @value{GDBN} debugging info for breakpoint insertion +and removal. The default is off. +@item show debug breakpoints +Displays the current state of displaying @value{GDBN} debugging info for +breakpoint insertion and removal. @end table @node Other Misc Settings -- 2.25.1 Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928