> On Jan 19, 2022, at 6:40 AM, Pavel Labath <pa...@labath.sk> wrote: > > Hi all, > > In case you haven't noticed, I'd like to draw your attention to the in-flight > patches (https://reviews.llvm.org/D117382, https://reviews.llvm.org/D117490) > whose goal clean up/improve/streamline the logging infrastructure. > > I'm don't want go into technical details here (they're on the patch), but the > general idea is to replace statements like > GetLogIf(Any/All)CategoriesSet(LIBLLDB_LOG_CAT1 | LIBLLDB_LOG_CAT2) > with > GetLogIf(Any/All)(LLDBLog::Cat1 | LLDBLog::Cat2) > i.e., drop macros and make use of templates to make the function calls > shorter and safer. > > The reason I'm writing this email is to ask about the "All" versions of these > logging functions. Do you find them useful in practice? > > I'm asking that because I've never used this functionality. While I can't > find anything wrong with the concept in theory, practically I think it's just > confusing to have some log message appear only for some combination of > enabled channels. It might have made some sense when we had a "verbose" > logging channel, but that one is long gone (we still have a verbose logging > *flag*). > > In fact, out of all our GetLogIf calls (1203), less than 1% (11*) uses the > GetLogIfAll form with more than one category. Of those, three are in tests, > one is definitely a bug (it combines the category with > LLDB_LOG_OPTION_VERBOSE), and the others (7) are of questionable usefulness > (to me anyway). > > If we got rid of this, we could simplify the logging calls even further and > have something like: > Log *log = GetLog(LLDBLog::Process);
Can a template function deduce the log type from an argument? Wouldn't this have to be: Log *log = GetLog<LLDBLog>(LLDBLog::Process); That is why I was hinting if we want to just use the enum class itself: Log *log = LLDBLog::GetLog(LLDBLog::Process); The template class in your second patch seems cool, but I don't understand how it worked without going and reading up on templates in C++ and spending 20 minutes trying to wrap my brain around it. Or do we just switch to a dedicated log class with unique methods: class LLDBLog: public Log { Log *Process() { return GetLog(1u << 0); } Log *Thread() { return GetLog(1u << 1); } }; and avoid all the enums? Then we can't ever feed a bad enum or #define into the wrong log class. _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev