[ros-kernel] Re: Enhanced error messages
martin-fuchs at gmx.net
Thu Jan 8 10:29:26 CET 2004
> This of course assumes that you haven't called another error setting API
> function (i.e. nearly all of them) in-between CreateFile and FormatMessage
> that would destroy that information. In a lot of cases, that's not
> necessarily true. Consider the common code path trap error->cleanup->report
> error. If any API calls are involved in the cleanup, or pre-report phase,
> then the extended error information would be lost. This could even be heap
> allocation in some cases.
This problems could been dealed with. A reasonable library avoids to destroy
error information in the error path. It it does not, it also destroys the error
code of GetLastError().
> The other case that breaks is calling
> FormatMessage with no buffer, to get the number of characters required for
> it (then typically followed by storage allocation). Not 100% sure, but it's
> a fine bet that GetLastError() == ERROR_INSUFFICIENT_BUFFER after that,
> which again would destroy the extended information. In addition, you have
This would be a design flaw in FormatMessage() itself. Could also be dealed
with since we write out own version.
> to consider where the storage for this information is coming from --
> seemingly it would have to be some TLS as the last error number itself is,
> and that implies extra weight per thr!
> ead. Alternately, it implies allocating memory at each failure, which is
> more weight again.
It's just one pointer more per thread, and a string copy in case of some errors.
I think this won't hurt compared to the gain of better error messages.
More information about the Ros-kernel