diff options
Diffstat (limited to 'gdb/skip.c')
-rw-r--r-- | gdb/skip.c | 188 |
1 files changed, 94 insertions, 94 deletions
@@ -46,11 +46,10 @@ static bool debug_skip = false; class skiplist_entry { public: + /* Create a skiplist_entry object and add it to the chain. */ - static void add_entry (bool file_is_glob, - std::string &&file, - bool function_is_regexp, - std::string &&function); + static void add_entry (bool file_is_glob, std::string &&file, + bool function_is_regexp, std::string &&function); /* Return true if the skip entry has a file or glob-style file pattern that matches FUNCTION_SAL. */ @@ -62,14 +61,20 @@ public: /* Getters. */ int number () const { return m_number; }; + bool enabled () const { return m_enabled; }; + bool file_is_glob () const { return m_file_is_glob; } + const std::string &file () const { return m_file; } + const std::string &function () const { return m_function; } + bool function_is_regexp () const { return m_function_is_regexp; } /* Setters. */ void enable () { m_enabled = true; }; + void disable () { m_enabled = false; }; /* Disable copy. */ @@ -77,9 +82,14 @@ public: void operator= (const skiplist_entry &) = delete; private: + /* Key that grants access to the constructor. */ - struct private_key {}; + struct private_key + { + }; + public: + /* Public so we can construct with container::emplace_back. Since it requires a private class key, it can't be called from outside. Use the add_entry static factory method to construct instead. */ @@ -88,6 +98,7 @@ public: private_key); private: + /* Return true if we're stopped at a file to be skipped. */ bool do_skip_file_p (const symtab_and_line &function_sal) const; @@ -95,6 +106,7 @@ private: bool do_skip_gfile_p (const symtab_and_line &function_sal) const; private: /* data */ + int m_number = -1; /* True if FILE is a glob-style pattern. @@ -122,11 +134,9 @@ private: /* data */ static std::list<skiplist_entry> skiplist_entries; static int highest_skiplist_entry_num = 0; -skiplist_entry::skiplist_entry (bool file_is_glob, - std::string &&file, +skiplist_entry::skiplist_entry (bool file_is_glob, std::string &&file, bool function_is_regexp, - std::string &&function, - private_key) + std::string &&function, private_key) : m_file_is_glob (file_is_glob), m_file (std::move (file)), m_function_is_regexp (function_is_regexp), @@ -142,7 +152,7 @@ skiplist_entry::skiplist_entry (bool file_is_glob, gdb_assert (!m_function.empty ()); m_compiled_function_regexp.emplace (m_function.c_str (), REG_NOSUB | REG_EXTENDED, - _("regexp")); + _ ("regexp")); } } @@ -150,10 +160,8 @@ void skiplist_entry::add_entry (bool file_is_glob, std::string &&file, bool function_is_regexp, std::string &&function) { - skiplist_entries.emplace_back (file_is_glob, - std::move (file), - function_is_regexp, - std::move (function), + skiplist_entries.emplace_back (file_is_glob, std::move (file), + function_is_regexp, std::move (function), private_key {}); /* Incremented after push_back, in case push_back throws. */ @@ -172,7 +180,7 @@ skip_file_command (const char *arg, int from_tty) { symtab = get_last_displayed_symtab (); if (symtab == NULL) - error (_("No default file now.")); + error (_ ("No default file now.")); /* It is not a typo, symtab_to_filename_for_display would be needlessly ambiguous. */ @@ -181,10 +189,10 @@ skip_file_command (const char *arg, int from_tty) else filename = arg; - skiplist_entry::add_entry (false, std::string (filename), - false, std::string ()); + skiplist_entry::add_entry (false, std::string (filename), false, + std::string ()); - gdb_printf (_("File %s will be skipped when stepping.\n"), filename); + gdb_printf (_ ("File %s will be skipped when stepping.\n"), filename); } /* Create a skiplist entry for the given function NAME and add it to the @@ -195,7 +203,7 @@ skip_function (const char *name) { skiplist_entry::add_entry (false, std::string (), false, std::string (name)); - gdb_printf (_("Function %s will be skipped when stepping.\n"), name); + gdb_printf (_ ("Function %s will be skipped when stepping.\n"), name); } static void @@ -204,14 +212,14 @@ skip_function_command (const char *arg, int from_tty) /* Default to the current function if no argument is given. */ if (arg == NULL) { - frame_info_ptr fi = get_selected_frame (_("No default function now.")); + frame_info_ptr fi = get_selected_frame (_ ("No default function now.")); struct symbol *sym = get_frame_function (fi); const char *name = NULL; if (sym != NULL) name = sym->print_name (); else - error (_("No function found containing current program point %s."), + error (_ ("No function found containing current program point %s."), paddress (get_current_arch (), get_frame_pc (fi))); skip_function (name); return; @@ -244,40 +252,36 @@ skip_command (const char *arg, int from_tty) const char *p = argv[i]; const char *value = argv[i + 1]; - if (strcmp (p, "-fi") == 0 - || strcmp (p, "-file") == 0) + if (strcmp (p, "-fi") == 0 || strcmp (p, "-file") == 0) { if (value == NULL) - error (_("Missing value for %s option."), p); + error (_ ("Missing value for %s option."), p); file = value; ++i; } - else if (strcmp (p, "-gfi") == 0 - || strcmp (p, "-gfile") == 0) + else if (strcmp (p, "-gfi") == 0 || strcmp (p, "-gfile") == 0) { if (value == NULL) - error (_("Missing value for %s option."), p); + error (_ ("Missing value for %s option."), p); gfile = value; ++i; } - else if (strcmp (p, "-fu") == 0 - || strcmp (p, "-function") == 0) + else if (strcmp (p, "-fu") == 0 || strcmp (p, "-function") == 0) { if (value == NULL) - error (_("Missing value for %s option."), p); + error (_ ("Missing value for %s option."), p); function = value; ++i; } - else if (strcmp (p, "-rfu") == 0 - || strcmp (p, "-rfunction") == 0) + else if (strcmp (p, "-rfu") == 0 || strcmp (p, "-rfunction") == 0) { if (value == NULL) - error (_("Missing value for %s option."), p); + error (_ ("Missing value for %s option."), p); rfunction = value; ++i; } else if (*p == '-') - error (_("Invalid skip option: %s"), p); + error (_ ("Invalid skip option: %s"), p); else if (i == 0) { /* Assume the user entered "skip FUNCTION-NAME". @@ -288,19 +292,19 @@ skip_command (const char *arg, int from_tty) return; } else - error (_("Invalid argument: %s"), p); + error (_ ("Invalid argument: %s"), p); } if (file != NULL && gfile != NULL) - error (_("Cannot specify both -file and -gfile.")); + error (_ ("Cannot specify both -file and -gfile.")); if (function != NULL && rfunction != NULL) - error (_("Cannot specify both -function and -rfunction.")); + error (_ ("Cannot specify both -function and -rfunction.")); /* This shouldn't happen as "skip" by itself gets punted to skip_function_command. */ - gdb_assert (file != NULL || gfile != NULL - || function != NULL || rfunction != NULL); + gdb_assert (file != NULL || gfile != NULL || function != NULL + || rfunction != NULL); std::string entry_file; if (file != NULL) @@ -324,27 +328,27 @@ skip_command (const char *arg, int from_tty) { const char *file_to_print = file != NULL ? file : gfile; const char *function_to_print = function != NULL ? function : rfunction; - const char *file_text = gfile != NULL ? _("File(s)") : _("File"); - const char *lower_file_text = gfile != NULL ? _("file(s)") : _("file"); + const char *file_text = gfile != NULL ? _ ("File(s)") : _ ("File"); + const char *lower_file_text = gfile != NULL ? _ ("file(s)") : _ ("file"); const char *function_text - = rfunction != NULL ? _("Function(s)") : _("Function"); + = rfunction != NULL ? _ ("Function(s)") : _ ("Function"); if (function_to_print == NULL) { - gdb_printf (_("%s %s will be skipped when stepping.\n"), - file_text, file_to_print); + gdb_printf (_ ("%s %s will be skipped when stepping.\n"), file_text, + file_to_print); } else if (file_to_print == NULL) { - gdb_printf (_("%s %s will be skipped when stepping.\n"), + gdb_printf (_ ("%s %s will be skipped when stepping.\n"), function_text, function_to_print); } else { - gdb_printf (_("%s %s in %s %s will be skipped" - " when stepping.\n"), - function_text, function_to_print, - lower_file_text, file_to_print); + gdb_printf (_ ("%s %s in %s %s will be skipped" + " when stepping.\n"), + function_text, function_to_print, lower_file_text, + file_to_print); } } } @@ -366,10 +370,10 @@ info_skip_command (const char *arg, int from_tty) if (num_printable_entries == 0) { if (arg == NULL) - current_uiout->message (_("Not skipping any files or functions.\n")); + current_uiout->message (_ ("Not skipping any files or functions.\n")); else current_uiout->message ( - _("No skiplist entries found with number %s.\n"), arg); + _ ("No skiplist entries found with number %s.\n"), arg); return; } @@ -377,11 +381,11 @@ info_skip_command (const char *arg, int from_tty) ui_out_emit_table table_emitter (current_uiout, 6, num_printable_entries, "SkiplistTable"); - current_uiout->table_header (5, ui_left, "number", "Num"); /* 1 */ - current_uiout->table_header (3, ui_left, "enabled", "Enb"); /* 2 */ - current_uiout->table_header (4, ui_right, "regexp", "Glob"); /* 3 */ - current_uiout->table_header (20, ui_left, "file", "File"); /* 4 */ - current_uiout->table_header (2, ui_right, "regexp", "RE"); /* 5 */ + current_uiout->table_header (5, ui_left, "number", "Num"); /* 1 */ + current_uiout->table_header (3, ui_left, "enabled", "Enb"); /* 2 */ + current_uiout->table_header (4, ui_right, "regexp", "Glob"); /* 3 */ + current_uiout->table_header (20, ui_left, "file", "File"); /* 4 */ + current_uiout->table_header (2, ui_right, "regexp", "RE"); /* 5 */ current_uiout->table_header (40, ui_noalign, "function", "Function"); /* 6 */ current_uiout->table_body (); @@ -406,21 +410,19 @@ info_skip_command (const char *arg, int from_tty) current_uiout->field_string ("file", e.file ().empty () ? "<none>" - : e.file ().c_str (), + : e.file ().c_str (), e.file ().empty () - ? metadata_style.style () - : file_name_style.style ()); /* 4 */ + ? metadata_style.style () + : file_name_style.style ()); /* 4 */ if (e.function_is_regexp ()) current_uiout->field_string ("regexp", "y"); /* 5 */ else current_uiout->field_string ("regexp", "n"); /* 5 */ - current_uiout->field_string ("function", - e.function ().empty () ? "<none>" - : e.function ().c_str (), - e.function ().empty () - ? metadata_style.style () - : function_name_style.style ()); /* 6 */ + current_uiout->field_string ( + "function", e.function ().empty () ? "<none>" : e.function ().c_str (), + e.function ().empty () ? metadata_style.style () + : function_name_style.style ()); /* 6 */ current_uiout->text ("\n"); } @@ -439,7 +441,7 @@ skip_enable_command (const char *arg, int from_tty) } if (!found) - error (_("No skiplist entries found with number %s."), arg); + error (_ ("No skiplist entries found with number %s."), arg); } static void @@ -455,7 +457,7 @@ skip_disable_command (const char *arg, int from_tty) } if (!found) - error (_("No skiplist entries found with number %s."), arg); + error (_ ("No skiplist entries found with number %s."), arg); } static void @@ -463,8 +465,7 @@ skip_delete_command (const char *arg, int from_tty) { bool found = false; - for (auto it = skiplist_entries.begin (), - end = skiplist_entries.end (); + for (auto it = skiplist_entries.begin (), end = skiplist_entries.end (); it != end;) { const skiplist_entry &e = *it; @@ -479,15 +480,14 @@ skip_delete_command (const char *arg, int from_tty) } if (!found) - error (_("No skiplist entries found with number %s."), arg); + error (_ ("No skiplist entries found with number %s."), arg); } bool skiplist_entry::do_skip_file_p (const symtab_and_line &function_sal) const { if (debug_skip) - gdb_printf (gdb_stdlog, - "skip: checking if file %s matches non-glob %s...", + gdb_printf (gdb_stdlog, "skip: checking if file %s matches non-glob %s...", function_sal.symtab->filename, m_file.c_str ()); bool result; @@ -502,7 +502,8 @@ skiplist_entry::do_skip_file_p (const symtab_and_line &function_sal) const files are involved, do a quick comparison of the basenames. */ else if (!basenames_may_differ && filename_cmp (lbasename (function_sal.symtab->filename), - lbasename (m_file.c_str ())) != 0) + lbasename (m_file.c_str ())) + != 0) result = false; else { @@ -522,8 +523,7 @@ bool skiplist_entry::do_skip_gfile_p (const symtab_and_line &function_sal) const { if (debug_skip) - gdb_printf (gdb_stdlog, - "skip: checking if file %s matches glob %s...", + gdb_printf (gdb_stdlog, "skip: checking if file %s matches glob %s...", function_sal.symtab->filename, m_file.c_str ()); bool result; @@ -531,7 +531,8 @@ skiplist_entry::do_skip_gfile_p (const symtab_and_line &function_sal) const /* 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) + FNM_FILE_NAME | FNM_NOESCAPE) + == 0) result = true; /* Before we invoke symtab_to_fullname, which is expensive, do a quick @@ -540,9 +541,10 @@ skiplist_entry::do_skip_gfile_p (const symtab_and_line &function_sal) const If the basename of the glob pattern is something like "*.c" then this isn't much of a win. Oh well. */ else if (!basenames_may_differ - && gdb_filename_fnmatch (lbasename (m_file.c_str ()), - lbasename (function_sal.symtab->filename), - FNM_FILE_NAME | FNM_NOESCAPE) != 0) + && gdb_filename_fnmatch (lbasename (m_file.c_str ()), + lbasename (function_sal.symtab->filename), + FNM_FILE_NAME | FNM_NOESCAPE) + != 0) result = false; else { @@ -643,8 +645,7 @@ function_name_is_marked_for_skip (const char *function_name, /* Completer for skip numbers. */ static void -complete_skip_number (cmd_list_element *cmd, - completion_tracker &completer, +complete_skip_number (cmd_list_element *cmd, completion_tracker &completer, const char *text, const char *word) { size_t word_len = strlen (word); @@ -658,13 +659,14 @@ complete_skip_number (cmd_list_element *cmd, } void _initialize_step_skip (); + void _initialize_step_skip () { static struct cmd_list_element *skiplist = NULL; struct cmd_list_element *c; - add_prefix_cmd ("skip", class_breakpoint, skip_command, _("\ + add_prefix_cmd ("skip", class_breakpoint, skip_command, _ ("\ Ignore a function while stepping.\n\ \n\ Usage: skip [FUNCTION-NAME]\n\ @@ -679,21 +681,21 @@ FUNCTION-SPEC is one of:\n\ -rfu|-rfunction FUNCTION-NAME-REGULAR-EXPRESSION"), &skiplist, 1, &cmdlist); - c = add_cmd ("file", class_breakpoint, skip_file_command, _("\ + c = add_cmd ("file", class_breakpoint, skip_file_command, _ ("\ Ignore a file while stepping.\n\ Usage: skip file [FILE-NAME]\n\ If no filename is given, ignore the current file."), &skiplist); set_cmd_completer (c, filename_completer); - c = add_cmd ("function", class_breakpoint, skip_function_command, _("\ + c = add_cmd ("function", class_breakpoint, skip_function_command, _ ("\ Ignore a function while stepping.\n\ Usage: skip function [FUNCTION-NAME]\n\ If no function name is given, skip the current function."), &skiplist); set_cmd_completer (c, location_completer); - c = add_cmd ("enable", class_breakpoint, skip_enable_command, _("\ + c = add_cmd ("enable", class_breakpoint, skip_enable_command, _ ("\ Enable skip entries.\n\ Usage: skip enable [NUMBER | RANGE]...\n\ You can specify numbers (e.g. \"skip enable 1 3\"),\n\ @@ -702,7 +704,7 @@ If you don't specify any numbers or ranges, we'll enable all skip entries."), &skiplist); set_cmd_completer (c, complete_skip_number); - c = add_cmd ("disable", class_breakpoint, skip_disable_command, _("\ + c = add_cmd ("disable", class_breakpoint, skip_disable_command, _ ("\ Disable skip entries.\n\ Usage: skip disable [NUMBER | RANGE]...\n\ You can specify numbers (e.g. \"skip disable 1 3\"),\n\ @@ -711,7 +713,7 @@ If you don't specify any numbers or ranges, we'll disable all skip entries."), &skiplist); set_cmd_completer (c, complete_skip_number); - c = add_cmd ("delete", class_breakpoint, skip_delete_command, _("\ + c = add_cmd ("delete", class_breakpoint, skip_delete_command, _ ("\ Delete skip entries.\n\ Usage: skip delete [NUMBER | RANGES]...\n\ You can specify numbers (e.g. \"skip delete 1 3\"),\n\ @@ -720,7 +722,7 @@ If you don't specify any numbers or ranges, we'll delete all skip entries."), &skiplist); set_cmd_completer (c, complete_skip_number); - add_info ("skip", info_skip_command, _("\ + add_info ("skip", info_skip_command, _ ("\ Display the status of skips.\n\ Usage: info skip [NUMBER | RANGES]...\n\ You can specify numbers (e.g. \"info skip 1 3\"), \n\ @@ -728,13 +730,11 @@ ranges (e.g. \"info skip 4-8\"), or both (e.g. \"info skip 1 3 4-8\").\n\n\ If you don't specify any numbers or ranges, we'll show all skips.")); set_cmd_completer (c, complete_skip_number); - add_setshow_boolean_cmd ("skip", class_maintenance, - &debug_skip, _("\ + add_setshow_boolean_cmd ("skip", class_maintenance, &debug_skip, _ ("\ Set whether to print the debug output about skipping files and functions."), - _("\ + _ ("\ Show whether the debug output about skipping files and functions is printed."), - _("\ + _ ("\ When non-zero, debug output about skipping files and functions is displayed."), - NULL, NULL, - &setdebuglist, &showdebuglist); + NULL, NULL, &setdebuglist, &showdebuglist); } |