From e0f3fd7c44cebec7d787893b9c800e7de509cb32 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 9 Jun 2016 15:20:09 -0600 Subject: PR python/19293 - invalidate frame cache when unwinders change PR python/19293 notes that when a Python unwinder is disabled, the frame cache is not invalidated. This means that disabling an unwinder doesn't have any immediate effect -- but in my experience it's often the case that I want to enable or disable an unwinder in order to see what happens. This patch adds a new gdb.invalidate_cached_frames function and arranges for the relevant bits of library code to call it. I've only partially documented this function, considering a warning sufficient without going into all the reasons ordinary code should not call it. The name of the new function was taken from a comment in frame.h next to reinit_frame_cache. No new test as I think the updates to the existing test are sufficient to show that the code is working as intended. Built and regtested on x86-64 Fedora 23. 2016-07-12 Tom Tromey PR python/19293: * python/lib/gdb/command/unwinders.py (do_enable_unwinder): Call gdb.invalidate_cached_frames. * python/lib/gdb/unwinder.py (register_unwinder): Call gdb.invalidate_cached_frames. * python/python.c (gdbpy_invalidate_cached_frames): New function. (python_GdbMethods): Add entry for invalidate_cached_frames. 2016-07-12 Tom Tromey PR python/19293: * python.texi (Frames In Python): Document gdb.invalidate_cached_frames. 2016-07-12 Tom Tromey PR python/19293: * gdb.python/py-unwind-maint.exp: Update tests. --- gdb/doc/python.texi | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'gdb/doc/python.texi') diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 6623d8e..f218ad6 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -3838,6 +3838,15 @@ frames, as expressed by the given @var{reason} code (an integer, see the @code{unwind_stop_reason} method further down in this section). @end defun +@findex gdb.invalidate_cached_frames +@defun gdb.invalidate_cached_frames +@value{GDBN} internally keeps a cache of the frames that have been +unwound. This function invalidates this cache. + +This function should not generally be called by ordinary Python code. +It is documented for the sake of completeness. +@end defun + A @code{gdb.Frame} object has the following methods: @defun Frame.is_valid () -- cgit v1.1