From patchwork Wed Sep 12 13:11:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 29332 Received: (qmail 129964 invoked by alias); 12 Sep 2018 13:12:19 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 129889 invoked by uid 89); 12 Sep 2018 13:12:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.2 spammy=Over, H*r:15.20.1143.13, H*RU:15.20.1143.13, Hx-spam-relays-external:15.20.1143.13 X-HELO: sesbmg23.ericsson.net Received: from sesbmg23.ericsson.net (HELO sesbmg23.ericsson.net) (193.180.251.37) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 12 Sep 2018 13:12:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801; c=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1536757932; h=From:Sender:Reply-To:Subject:Date:Message-Id:To:CC:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=BcZJC6UuxdbMJHkqsuHJi31z006vdukPfKRfRDfae7o=; b=QG/uX8x4lfor6tfztnBY+gBUiguJrOW0bi1czhaa00Y6F7+ZdIB0Kgf0oSrpM82e HHR8URi5V/yKnWoBfzSXVVcmfIOT5tNK2GdThdeWO55MY2d9mhzo8DFj2zy6hRfp YdXgJKTr4AZiTHIqD2vkhXqXlhU9M5OfrDQqLe7dplQ=; Received: from ESESSMB501.ericsson.se (Unknown_Domain [153.88.183.119]) by sesbmg23.ericsson.net (Symantec Mail Security) with SMTP id 60.E6.05037.CA0199B5; Wed, 12 Sep 2018 15:12:12 +0200 (CEST) Received: from ESESSMB503.ericsson.se (153.88.183.164) by ESESSMB501.ericsson.se (153.88.183.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3; Wed, 12 Sep 2018 15:11:47 +0200 Received: from NAM04-SN1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESSMB503.ericsson.se (153.88.183.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3 via Frontend Transport; Wed, 12 Sep 2018 15:11:47 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OhaVBvY208ixlfytqy8FIRXYGtU0TVGOj+z6ianrFLw=; b=l/xiU06Vbr1Cf6w8XREOKyZW7y0HGjiCuOBIKIen74/JDTGhUnojZRLHbhaF/A+iMdTslR7De6vLuxIQ4s+gIVTpzvrx/Saiz9Whh2EcBvyTsThFPAaFz6YOQXChkT1xWYaP2AuX2iPqNsCvIAJ7T2JqTNsXoIe821qhrcUjMvo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from elxacz23q12.ericsson.se (192.176.1.84) by DM6PR15MB2396.namprd15.prod.outlook.com (2603:10b6:5:8d::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.13; Wed, 12 Sep 2018 13:11:43 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH v2 (doc)] Add debug output for the skip feature Date: Wed, 12 Sep 2018 09:11:10 -0400 Message-Id: <20180912131110.24245-1-simon.marchi@ericsson.com> In-Reply-To: References: MIME-Version: 1.0 Return-Path: simon.marchi@ericsson.com Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-IsSubscribed: yes While trying to create skips for libstdc++, I found myself debugging GDB quite a bit, mostly to find out what the exact function name to match is. I thought it would make sense to have this information as debug output. This patch adds "set debug skip on|off". gdb/ChangeLog: * skip.c (debug_skip): New variable. (skiplist_entry::do_skip_file_p): Add debug output. (skiplist_entry::do_skip_gfile_p): Likewise. (skiplist_entry::skip_function_p): Likewise. (_initialize_step_skip): Create debug command. * NEWS: Mention set/show debug skip. gdb/doc/ChangeLog: * gdb.texinfo (Skipping Over Functions and Files): Document set/show debug skip. --- gdb/NEWS | 5 +++ gdb/doc/gdb.texinfo | 8 ++++ gdb/skip.c | 100 +++++++++++++++++++++++++++++++++----------- 3 files changed, 88 insertions(+), 25 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 75436b0fc32..4e4f12d8d13 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -29,6 +29,11 @@ show debug compile-cplus-types C++ compile feature. Commands have no effect while compiliong for other languages. +set debug skip +show debug skip + Control whether debug output about files/functions skipping is + displayed. + frame apply [all | COUNT | -COUNT | level LEVEL...] [FLAG]... COMMAND Apply a command to some frames. FLAG arguments allow to control what output to produce and how to handle diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 1d96c68d830..5e039734c41 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -5895,6 +5895,14 @@ skips. Disable the specified skip(s). If @var{range} is not specified, disable all skips. +@kindex set debug skip +@item set debug skip @r{[}on|off@r{]} +Set whether to print the debug output about the skip feature. + +@kindex show debug skip +@item show debug skip +Show whether the debug output about the skip feature is shown. + @end table @node Signals diff --git a/gdb/skip.c b/gdb/skip.c index 7a6f2e712b9..361590bf5b2 100644 --- a/gdb/skip.c +++ b/gdb/skip.c @@ -37,6 +37,10 @@ #include "common/gdb_optional.h" #include +/* True if we want to print debug printouts related to file/function + skipping. */ +static int debug_skip = 0; + class skiplist_entry { public: @@ -482,59 +486,77 @@ skip_delete_command (const char *arg, int from_tty) bool skiplist_entry::do_skip_file_p (const symtab_and_line &function_sal) const { + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, + "skip: checking if file %s matches non-glob %s...", + function_sal.symtab->filename, m_file.c_str ()); + + bool result; + /* Check first sole SYMTAB->FILENAME. It may not be a substring of symtab_to_fullname as it may contain "./" etc. */ if (compare_filenames_for_search (function_sal.symtab->filename, m_file.c_str ())) - return true; + result = true; /* Before we invoke realpath, which can get expensive when many files are involved, do a quick comparison of the basenames. */ - if (!basenames_may_differ - && filename_cmp (lbasename (function_sal.symtab->filename), - lbasename (m_file.c_str ())) != 0) - return false; + else if (!basenames_may_differ + && filename_cmp (lbasename (function_sal.symtab->filename), + lbasename (m_file.c_str ())) != 0) + result = false; + else + { + /* Note: symtab_to_fullname caches its result, thus we don't have to. */ + const char *fullname = symtab_to_fullname (function_sal.symtab); - /* Note: symtab_to_fullname caches its result, thus we don't have to. */ - { - const char *fullname = symtab_to_fullname (function_sal.symtab); + result = compare_filenames_for_search (fullname, m_file.c_str ()); + } - if (compare_filenames_for_search (fullname, m_file.c_str ())) - return true; - } + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, result ? "yes.\n" : "no.\n"); - return false; + return result; } bool skiplist_entry::do_skip_gfile_p (const symtab_and_line &function_sal) const { + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, + "skip: checking if file %s matches glob %s...", + function_sal.symtab->filename, m_file.c_str ()); + + bool result; + /* Check first sole SYMTAB->FILENAME. It may not be a substring of symtab_to_fullname as it may contain "./" etc. */ if (gdb_filename_fnmatch (m_file.c_str (), function_sal.symtab->filename, FNM_FILE_NAME | FNM_NOESCAPE) == 0) - return true; + result = true; /* Before we invoke symtab_to_fullname, which is expensive, do a quick comparison of the basenames. Note that we assume that lbasename works with glob-style patterns. If the basename of the glob pattern is something like "*.c" then this isn't much of a win. Oh well. */ - if (!basenames_may_differ + else if (!basenames_may_differ && gdb_filename_fnmatch (lbasename (m_file.c_str ()), lbasename (function_sal.symtab->filename), FNM_FILE_NAME | FNM_NOESCAPE) != 0) - return false; + result = false; + else + { + /* Note: symtab_to_fullname caches its result, thus we don't have to. */ + const char *fullname = symtab_to_fullname (function_sal.symtab); - /* Note: symtab_to_fullname caches its result, thus we don't have to. */ - { - const char *fullname = symtab_to_fullname (function_sal.symtab); + result = compare_glob_filenames_for_search (fullname, m_file.c_str ()); + } - if (compare_glob_filenames_for_search (fullname, m_file.c_str ())) - return true; - } + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, result ? "yes.\n" : "no.\n"); - return false; + return result; } bool @@ -558,14 +580,33 @@ skiplist_entry::skip_function_p (const char *function_name) const if (m_function.empty ()) return false; + bool result; + if (m_function_is_regexp) { + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, + "skip: checking if function %s matches regex %s...", + function_name, m_function.c_str ()); + gdb_assert (m_compiled_function_regexp); - return (m_compiled_function_regexp->exec (function_name, 0, NULL, 0) - == 0); + result + = (m_compiled_function_regexp->exec (function_name, 0, NULL, 0) == 0); } else - return strcmp_iw (function_name, m_function.c_str ()) == 0; + { + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, + ("skip: checking if function %s matches non-regex " + "%s..."), + function_name, m_function.c_str ()); + result = (strcmp_iw (function_name, m_function.c_str ()) == 0); + } + + if (debug_skip) + fprintf_unfiltered (gdb_stdlog, result ? "yes.\n" : "no.\n"); + + return result; } /* See skip.h. */ @@ -664,4 +705,13 @@ Usage: skip info [NUMBER | RANGES]...\n\ The \"Type\" column indicates one of:\n\ \tfile - ignored file\n\ \tfunction - ignored function")); + + add_setshow_boolean_cmd ("skip", class_maintenance, + &debug_skip, _("\ +Set whether debug output about skipping files/functions should be displayed."), + _("\ +Show whether debug output about skipping files/functions is displayed."), _("\ +When non-zero, debug output for skipping files/functions is displayed."), + NULL, NULL, + &setdebuglist, &showdebuglist); }