Thread: Improve Assert output
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
Attachment
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