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]"
