This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: Make iterator printers fail more gracefully


On 15/12/16 13:11 -0500, David Malcolm wrote:
On Thu, 2016-12-15 at 17:39 +0000, Jonathan Wakely wrote:
This patch tries to improve the user experience when debugging
container iterators, for cases where some of the typedefs used by the
printers are not in the debuginfo, so gdb.lookup_type() calls fail.
That happens if the iterator's operator*() and operator->() haven't
been instantiated, or if they've been inlined.

Currently this results in an exception:

$1 = Python Exception <class 'ValueError'> Cannot find type
std::_List_iterator<int>::_Node:

If the iterator being printed is part of some other object the whole
thing fails due to the exception.

With this patch the iterator instead prints:

$1 = <insufficient debuginfo for std::list iterator>

and if it's a subobject the rest of the object is printed, with that
as the value of the iterator.

	* python/libstdcxx/v6/printers.py
(StdListIteratorPrinter.to_string):
	Handle exception from failed type lookup and return user
-friendly
	string.
	(StdRbtreeIteratorPrinter.__init__): Handle exception from
failed
	type lookup.
	(StdRbtreeIteratorPrinter.to_string): Return user-friendly
string.

Seem reasonable?

I consider this a stop-gap until we have Xmethods for all our
iterator
types, then we'll be able to "print *iter" even without debuginfo for
all the iterator's members, and we can disable these printers.

BTW, is it always a ValueError exception?

(I'm a little wary of naked "except:" in Python, as it can catch
*anything*, including syntax errors in the try/except-guarded code).

Good point. As far as I know, the gdb.lookup_type method will throw a
ValueError in the case I'm trying to fix. If it can throw other things
we can deal with them later by adding other handlers.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]