Message ID | 87h88ac4fl.fsf@ispras.ru |
---|---|
State | New |
Headers | show |
Series | make gdbhooks.py idempotent with respect to reloading | expand |
Vladislav Ivanishin <vlad@ispras.ru> writes: > Hi! > > It is nice to be able to reload the pretty printers and convenience > functions from gdbhooks.py without exiting GDB: reloading cc1 takes > several seconds (plus, the debugging session is lost). > > Previously: > > (gdb) python import imp; imp.reload(gdbhooks); > RuntimeError: pretty-printer already registered: gcc > > Fixing this turned out easier than I expected. > (gdb) py help (gdb.printing) > revealed, that we can pass replace parameter to register_pretty_printer > (which is False by default). > > With the patch: > > (gdb) python import imp; imp.reload(gdbhooks); > Successfully loaded GDB hooks for GCC > > gcc/ > > * gdbhooks.py: Pass replace=True to > gdb.printing.register_pretty_printer. > --- > gcc/gdbhooks.py | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py > index 15a5ceaa56f..26a09749aa3 100644 > --- a/gcc/gdbhooks.py > +++ b/gcc/gdbhooks.py > @@ -602,7 +602,8 @@ def build_pretty_printer(): > > gdb.printing.register_pretty_printer( > gdb.current_objfile(), > - build_pretty_printer()) > + build_pretty_printer(), > + replace=True) > > def find_gcc_source_dir(): > # Use location of global "g" to locate the source tree > -- > 2.22.0 > > > OK? I actually think, that change is obvious. It has proven useful and I've not run into any issues with it. > BTW, perhaps I should also add a convenience function for 'import imp; > imp.reload(gdbhooks)' or something to that effect? I added a user-defined gdb command and a short alias for it. I think, this is obvious too, but would feel more comfortable if someone OKs it. Dave? Thanks, Vlad
Vladislav Ivanishin <vlad@ispras.ru> writes: > Vladislav Ivanishin <vlad@ispras.ru> writes: > >> Hi! >> >> It is nice to be able to reload the pretty printers and convenience >> functions from gdbhooks.py without exiting GDB: reloading cc1 takes >> several seconds (plus, the debugging session is lost). >> >> Previously: >> >> (gdb) python import imp; imp.reload(gdbhooks); >> RuntimeError: pretty-printer already registered: gcc >> >> Fixing this turned out easier than I expected. >> (gdb) py help (gdb.printing) >> revealed, that we can pass replace parameter to register_pretty_printer >> (which is False by default). >> >> With the patch: >> >> (gdb) python import imp; imp.reload(gdbhooks); >> Successfully loaded GDB hooks for GCC >> >> gcc/ >> >> * gdbhooks.py: Pass replace=True to >> gdb.printing.register_pretty_printer. >> --- >> gcc/gdbhooks.py | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py >> index 15a5ceaa56f..26a09749aa3 100644 >> --- a/gcc/gdbhooks.py >> +++ b/gcc/gdbhooks.py >> @@ -602,7 +602,8 @@ def build_pretty_printer(): >> >> gdb.printing.register_pretty_printer( >> gdb.current_objfile(), >> - build_pretty_printer()) >> + build_pretty_printer(), >> + replace=True) >> >> def find_gcc_source_dir(): >> # Use location of global "g" to locate the source tree >> -- >> 2.22.0 >> >> >> OK? > > I actually think, that change is obvious. It has proven useful and I've > not run into any issues with it. > >> BTW, perhaps I should also add a convenience function for 'import imp; >> imp.reload(gdbhooks)' or something to that effect? > > I added a user-defined gdb command and a short alias for it. I think, > this is obvious too, but would feel more comfortable if someone OKs it. > Dave? > > [PATCH] gdbinit.in: add reload-gdbhooks (rh) command > > gcc/ > * gdbinit.in (reload-gdbhooks): New command with an attached doc string. > (rh): New alias for it. > --- > gcc/gdbinit.in | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/gcc/gdbinit.in b/gcc/gdbinit.in > index cec55f86749..2454441f859 100644 > --- a/gcc/gdbinit.in > +++ b/gcc/gdbinit.in > @@ -216,6 +216,16 @@ is emitted (as opposed to those warnings that are suppressed by > command-line options). > end > > +define reload-gdbhooks > +python import imp; imp.reload(gdbhooks) > +end > + > +document reload-gdbhooks > +Load the gdbhooks.py module again in order to pick up any changes made to it. > +end > + > +alias rh = reload-gdbhooks > + > # Define some macros helpful to gdb when it is expanding macros. > macro define __FILE__ "gdb" > macro define __LINE__ 1 Committed both patches as obvious, revisions 273737 and 273738 respectively.
gcc/ * gdbhooks.py: Pass replace=True to gdb.printing.register_pretty_printer. --- gcc/gdbhooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py index 15a5ceaa56f..26a09749aa3 100644 --- a/gcc/gdbhooks.py +++ b/gcc/gdbhooks.py @@ -602,7 +602,8 @@ def build_pretty_printer(): gdb.printing.register_pretty_printer( gdb.current_objfile(), - build_pretty_printer()) + build_pretty_printer(), + replace=True) def find_gcc_source_dir(): # Use location of global "g" to locate the source tree -- 2.22.0