diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2012-04-17 15:56:21 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2012-04-17 15:56:21 +0000 |
commit | 4dc84fd1097fab1fb14a6c77a6b77003296d27eb (patch) | |
tree | 4fd4a5a7098fcd3971f63f0ab49b678d14166557 /gdb/auto-load.c | |
parent | bccbefd2aab863e24a122ea686cbd263041b4709 (diff) | |
download | gdb-4dc84fd1097fab1fb14a6c77a6b77003296d27eb.zip gdb-4dc84fd1097fab1fb14a6c77a6b77003296d27eb.tar.gz gdb-4dc84fd1097fab1fb14a6c77a6b77003296d27eb.tar.bz2 |
gdb/
New option "set debug auto-load".
* NEWS: New commands "set debug auto-load" and "show debug auto-load".
* auto-load.c (debug_auto_load, show_debug_auto_load: New.
(auto_load_safe_path_vec_update)
(filename_is_in_auto_load_safe_path_vec): Call fprintf_unfiltered
if DEBUG_AUTO_LOAD.
(file_is_auto_load_safe): New parameters debug_fmt and ....
Call fprintf_unfiltered if DEBUG_AUTO_LOAD.
(source_gdb_script_for_objfile): Extend the file_is_auto_load_safe
caller by explanatory string.
(_initialize_auto_load): Register "set debug auto-load".
* auto-load.h (file_is_auto_load_safe): New parameters debug_fmt
and ....
* linux-thread-db.c (try_thread_db_load_from_pdir_1)
(try_thread_db_load_from_dir): Extend the file_is_auto_load_safe caller
by explanatory string.
* main.c (captured_main): Likewise.
* python/py-auto-load.c (gdbpy_load_auto_script_for_objfile)
(source_section_scripts): Likewise.
gdb/doc/
New option "set debug auto-load".
* gdb.texinfo (Auto-loading): New menu item for auto-load verbose mode.
(auto-load verbose mode): New node.
Diffstat (limited to 'gdb/auto-load.c')
-rw-r--r-- | gdb/auto-load.c | 94 |
1 files changed, 84 insertions, 10 deletions
diff --git a/gdb/auto-load.c b/gdb/auto-load.c index 076e50b..9d19179 100644 --- a/gdb/auto-load.c +++ b/gdb/auto-load.c @@ -43,6 +43,20 @@ static void source_gdb_script_for_objfile (struct objfile *objfile, FILE *file, const char *filename); +/* Value of the 'set debug auto-load' configuration variable. */ +static int debug_auto_load = 0; + +/* "show" command for the debug_auto_load configuration variable. */ + +static void +show_debug_auto_load (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Debugging output for files " + "of 'set auto-load ...' is %s.\n"), + value); +} + /* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME scripts: set auto-load gdb-scripts on|off @@ -112,6 +126,11 @@ auto_load_safe_path_vec_update (void) unsigned len; int ix; + if (debug_auto_load) + fprintf_unfiltered (gdb_stdlog, + _("auto-load: Updating directories of \"%s\".\n"), + auto_load_safe_path); + free_char_ptr_vec (auto_load_safe_path_vec); auto_load_safe_path_vec = dirnames_to_char_ptr_vec (auto_load_safe_path); @@ -126,14 +145,34 @@ auto_load_safe_path_vec_update (void) char *real_path = gdb_realpath (expanded); /* Ensure the current entry is at least tilde_expand-ed. */ - xfree (dir); VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded); + if (debug_auto_load) + { + if (strcmp (expanded, dir) == 0) + fprintf_unfiltered (gdb_stdlog, + _("auto-load: Using directory \"%s\".\n"), + expanded); + else + fprintf_unfiltered (gdb_stdlog, + _("auto-load: Resolved directory \"%s\" " + "as \"%s\".\n"), + dir, expanded); + } + xfree (dir); + /* If gdb_realpath returns a different content, append it. */ if (strcmp (real_path, expanded) == 0) xfree (real_path); else - VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path); + { + VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path); + + if (debug_auto_load) + fprintf_unfiltered (gdb_stdlog, + _("auto-load: And canonicalized as \"%s\".\n"), + real_path); + } } } @@ -217,16 +256,30 @@ filename_is_in_auto_load_safe_path_vec (const char *filename, if (dir == NULL) { if (*filename_realp == NULL) - *filename_realp = gdb_realpath (filename); + { + *filename_realp = gdb_realpath (filename); + if (debug_auto_load && strcmp (*filename_realp, filename) != 0) + fprintf_unfiltered (gdb_stdlog, + _("auto-load: Resolved " + "file \"%s\" as \"%s\".\n"), + filename, *filename_realp); + } - for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir); - ++ix) - if (filename_is_in_dir (*filename_realp, dir)) - break; + if (strcmp (*filename_realp, filename) != 0) + for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir); + ++ix) + if (filename_is_in_dir (*filename_realp, dir)) + break; } if (dir != NULL) - return 1; + { + if (debug_auto_load) + fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches " + "directory \"%s\".\n"), + filename, dir); + return 1; + } return 0; } @@ -240,11 +293,20 @@ filename_is_in_auto_load_safe_path_vec (const char *filename, directory. */ int -file_is_auto_load_safe (const char *filename) +file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...) { char *filename_real = NULL; struct cleanup *back_to; + if (debug_auto_load) + { + va_list debug_args; + + va_start (debug_args, debug_fmt); + vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args); + va_end (debug_args); + } + back_to = make_cleanup (free_current_contents, &filename_real); if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real)) @@ -281,7 +343,10 @@ source_gdb_script_for_objfile (struct objfile *objfile, FILE *file, struct auto_load_pspace_info *pspace_info; volatile struct gdb_exception e; - is_safe = file_is_auto_load_safe (filename); + is_safe = file_is_auto_load_safe (filename, _("auto-load: Loading canned " + "sequences of commands script " + "\"%s\" for objfile \"%s\".\n"), + filename, objfile->name); /* Add this script to the hash table too so "info auto-load gdb-scripts" can print it. */ @@ -975,4 +1040,13 @@ See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\ access the current full list setting."), &cmdlist); set_cmd_completer (cmd, filename_completer); + + add_setshow_boolean_cmd ("auto-load", class_maintenance, + &debug_auto_load, _("\ +Set auto-load verifications debugging."), _("\ +Show auto-load verifications debugging."), _("\ +When non-zero, debugging output for files of 'set auto-load ...'\n\ +is displayed."), + NULL, show_debug_auto_load, + &setdebuglist, &showdebuglist); } |