On Tue, 10 Mar 2015, Gleb Smirnoff wrote:

On Tue, Mar 10, 2015 at 12:18:13PM +0200, Konstantin Belousov wrote:
K> On Tue, Mar 10, 2015 at 01:01:41PM +0300, Gleb Smirnoff wrote:
K> > On Sun, Mar 08, 2015 at 02:13:47AM +0000, Konstantin Belousov wrote:
K> > K> Author: kib
K> > K> Date: Sun Mar  8 02:13:46 2015
K> > K> New Revision: 279764
K> > K> URL: https://svnweb.freebsd.org/changeset/base/279764
K> > K>
K> > K> Log:
K> > K>   Fix function name in the panic message.
K> >
K> > Why not use "%s, __func__" always and never encounter this problem
K> > in future?
K>
K> Because you cannot grep for the panic string when __func__ is used.

It would also be an an obfuscation.

Grepping for panic string doesn't work in general.

Yes it does.  The string just needs to be reasonably unique.  Even a
mispelled function name is usually unique enough.  Only function names
like f or printf would give too many matches.  __func__ is not unique
enough.  Neither are short format strings like "%d, %d, %d".  Longer
format strings might be unique enough, but are harder to type.

A panic message
can report pointers or numbers, which make text not unique. Actually,

Uniqueness is not needed.  Even for a function name you would probably
only type a part of the name that you hope is unique, then examine the
grep output to see if more context is needed.

the messages that do report extra information are more useful. Also,

I consider them as usually just bloat.  Use a debugger to find more
info.  Unfortunately, not all users can run debuggers, and optimization
is now excessive so it breaks finding variable values.

if panic string resides in the source code under several levels of
indentation, it is likely to be split into two lines.

That would be another obfuscation.  Much worse that using __func__.

But you can always grep for the function name and locate the panic
or KASSERT in the function manually, which isn't a big deal. And
if %s, __func__ is used, you will never get to a wrong function.

Better yet, spell all function names as __func__ or "this" in comments
so that they are write-only there too ;-).

Even better yet, spell all function names as __func__ in calls too.
Something like __func__ would work for determining the function to call
only for recursive calls.  __func__ itself doesn't work for that since
it is a string.  Determining the name of a different function is more
difficult.  If I knew C++, I might be able to give an example using
"this".  In C I don't see a better obfuscation (that can be easily
written) than using macros to change hard-to-type function names like
printf to that_there_func_0.  The name of the current function is of
course this_here_func ;-).  To actually be easier to type, change to
names like _0, _1, _2, etc.

Bruce
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to