Обсуждение: Improve Assert output

Поиск
Список
Период
Сортировка

Improve Assert output

От
Peter Eisentraut
Дата:
This kind of output is usually not helpful:

TRAP: BadArgument("((context) != ((void *)0) && (((((const
Node*)((context)))->type) == T_AllocSetContext) || ((((const
Node*)((context)))->type) == T_SlabContext) || ((((const
Node*)((context)))->type) == T_GenerationContext)))", File:
"../../../../src/include/utils/memutils.h", Line: 129)

What we probably want is something like:

TRAP: BadArgument("MemoryContextIsValid(context)", File:
"../../../../src/include/utils/memutils.h", Line: 129)

The problem is that the way the Assert macros are written they
macro-expand the arguments before stringifying them.  The attached patch
fixes that.  This requires both replacing CppAsString by plain "#" and
not redirecting Assert() to Trap().

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Вложения

Re: Improve Assert output

От
Tom Lane
Дата:
Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:
> This kind of output is usually not helpful:
> TRAP: BadArgument("((context) != ((void *)0) && (((((const
> Node*)((context)))->type) == T_AllocSetContext) || ((((const
> Node*)((context)))->type) == T_SlabContext) || ((((const
> Node*)((context)))->type) == T_GenerationContext)))", File:
> "../../../../src/include/utils/memutils.h", Line: 129)

> What we probably want is something like:

> TRAP: BadArgument("MemoryContextIsValid(context)", File:
> "../../../../src/include/utils/memutils.h", Line: 129)

+1, that would be a big improvement.  The other thing that this
is fixing is that the existing output for Assert et al shows
the *inverted* condition, which I for one always found confusing.

I didn't try to test the patch, but it passes eyeball examination.

            regards, tom lane