File and line numbers in error messages
Greg Hudson
ghudson at MIT.EDU
Wed Apr 29 17:37:58 EDT 2009
On Tue, 2009-04-28 at 16:14 -0400, Ken Raeburn wrote:
> Even without the gcc bits, if you have C99 support it's doable.
Right, by starting the variadic part at the format argument. Got it.
> It's nitpicky, but I think I'd rather see "(get_in_tkt.c:1503)" added
> at the end.
Okay, but it's only easy to make it appear at the end of the error message, not the "while brushing my teeth" part that com_err appends.
> I'd think for many UNIX builds you'd actually want the capability
> compiled in, but turned off by default.
Currently leaning towards no on this, because it still adds static
strings to the library object files. Using an #ifdef also removes the
need for an autoconf check for variadic macros ("if it hurts for you to
define DEBUG_ERROR_FILE_LINE, don't define it") but for posterity, the
autoconf check is pretty simple:
dnl
dnl Test for C99-style variable-argument macro support
dnl
AC_CACHE_CHECK(if compiler supports C99-style variadic macros,
krb5_cv_variadic_macros,
[AC_COMPILE_IFELSE([
#define macro(...) return(__VA_ARGS__)
int main() { macro(1); }
], krb5_cv_variadic_macros=yes, krb5_cv_variadic_macros=no)])
if test "$krb5_cv_variadic_macros" = yes; then
AC_DEFINE(HAVE_VARIADIC_MACROS,1,[Define if compiler supports C99-style variadic macros.])
fi
dnl
> Then when someone reports [...]
As Sam pointed out, the onus is on us to make our error messages clear,
not rely on obscure features to support people who get unclear error
messages.
For similar reasons, I don't want to add a mkerr() and litter the code
with it at this time.
More information about the krbdev
mailing list