cvs commit: src/sys/alpha/alpha support.s src/sys/i386/i386
swtch.s src/sys/kern kern_shutdown.c src/sys/sys systm.h
jhb at FreeBSD.org
Wed Feb 18 06:36:35 PST 2004
On Tuesday 17 February 2004 08:00 pm, Marcel Moolenaar wrote:
> On Wed, Feb 18, 2004 at 09:43:16AM +1100, Bruce Evans wrote:
> > > Alternatively, we could extend KASSERT to emit a file and line
> > > number like assert(3) and instead of panic(). Seems very logical
> > > to me.
> > That feature was intentionally left out when KASSERT() was designed.
> > For some reason, we decided to give the invoker of KASSERT() complete
> > control over the message contents (unlike in userland where the message
> > is the condition stingized and followed by __FILE__ and __LINE__.
> > Presumably this was partly to permit use of existing panic messages
> > verbatim. I'm not completely happy with the results of this at any
> > level, especially at the source level. It requires and ugly syntax
> > (another layer of parentheses around the message), and is harder to
> > write and can be harder to read (writers have to think about what to
> > put in the message; it's normal to invert the sense of the assertion
> > and not unknown to make logic errors doing so; then readers don't
> > see the original condition in the panic message).
> I tend to agree. Most of the KASSERTs I put in have the bogus message
> "foo", simply because I cannot explain in a single sentence what's
> wrong and I don't want to break my flow of thinking while coding to
> come up with something. Hence, I either use a bogus "foo" or forget
> about the KASSERT altogether. The former is less bad than the latter,
> but not good at all.
> I prefer to put a comprehensive comment in front of the KASSERT and
> have people look there by having the KASSERT emit the file and line.
> The panic message that's the result of the failed assertion can be
> constant and should inform that the panic is the result of KASSERT.
> Alternatively, it can print the condition that failed.
> phk's change gave me the file and line, so it gave me something I
> liked. If that's going to be reverted, maybe people won't object to
> having KASSERT emit the file and line and no specific panic message
> at all?
Use MPASS() (macros that came in with SMPng from BSD/OS). MPASS(foo) will
work much like assert() in userland including file/line number info. I use
it a lot for simple != NULL tests and the like.
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the cvs-all