[Lldb-commits] [lldb] r236174 - Introduce a NullLog class, which ignores all messages.
Zachary Turner
zturner at google.com
Wed Apr 29 18:35:17 PDT 2015
If you don't want it in Core, I can move it to ProcessWindows. But locally
I've added logging where you can't even look at the function and tell what
it does anymore because of all the logging. I really don't want so much
boilerplate code taking up screen space in important methods, preventing
you from understanding what the methods do because each log statement is 4
lines instead of 1.
I'm open to suggestions, but ultimately in the code I'm writing in the
windows plugin, I don't want to check if statements every time I write a
log statement, so I need some kind of solution that makes that not
necessary.
On Wed, Apr 29, 2015 at 6:29 PM <jingham at apple.com> wrote:
> Yes, but that call is only used a handful of times, and only from code
> written back before this was checked into llvm.org, so that's more an
> argument for removing those calls than making that pattern more common.
>
> I really don't want people to have to reason about the expense of
> logging. I want there to be full rich log output that costs nothing when
> not turned on. It's so easy to add something that looks harmless to a log,
> but that ends up pulling in a whole bunch of debug information that we were
> trying hard not to touch. You probably won't notice that till you run on
> something really big, but then we will get slowdowns for no benefit.
>
> Jim
>
>
> > On Apr 29, 2015, at 6:18 PM, Zachary Turner <zturner at google.com> wrote:
> >
> > It's also worth pointing out that the method I've implemented here is a
> more general case of something already in LLDB.
> lldb_private::LogIfXXXCategoriesSet(). These 2 methods are equivalent to
> getting the log, checking for null, and logging if non null, except they
> always evaluate the arguments, as does my method. But the method I've
> implemented here allows access to every method of Log. Like Warn, Error,
> etc, so is even more flexible
> > On Wed, Apr 29, 2015 at 6:14 PM Enrico Granata <egranata at apple.com>
> wrote:
> > One possible avenue to fix the performance issue would be to have your
> log calls take a lambda expression that returns the string to be printed,
> e.g.
> >
> > #include <functional>
> > #include <string>
> > #include <iostream>
> > #include <stdlib.h>
> >
> > typedef std::function<std::string()> LogFunction;
> >
> > void log(bool dolog, LogFunction f) {
> > if (dolog)
> > std::cout << f() << std::endl;
> > }
> >
> > int main() {
> > log(true, [] () -> std::string { return "hello world"; } );
> > log(false, [] {sleep(10); return "hi"; });
> > return 0;
> > }
> >
> > I don’t think the code gets much better doing this compared to the
> previous if (log) model we were using - but that’s at least arguable
> >
> >
> >> More importantly, I don't think this is a good change. I want to be
> able to freely put complex log statements where ever I need without having
> to worry about the performance implications. That was always possible,
> because the cost of not logging was checking if log was NULL.
> >>
> >> With this change I'm always going to get back a log, so I'm always
> going to marshall the arguments, and do whatever work was going to go into
> printing, etc and then call a virtual function that does nothing with the
> results.
> >>
> >> That seems undesirable to me. You could work around this by having any
> code that does logging in a loop or that has complex arguments check if the
> log is a null log and not do the work if it is, but then we're right back
> where we started except now we only do the check sometimes, making things
> even more confusing.
> >>
> >> Jim
> >>
> >> On Apr 29, 2015, at 4:30 PM, Sean Callanan <scallanan at apple.com> wrote:
> >>
> >> Zachary,
> >>
> >> Log.cpp doesn’t build anymore with this change. In particular, you have
> >> –
> >> + virtual void
> >> + VAPrintf(const char *format, va_list args);
> >> –
> >> but at several places VAPrintf is called with no va_list, e.g.,
> >> –
> >> void
> >> -Log::Error (const char *format, ...)
> >> +Log::Error(const char *format, ...)
> >> {
> >> - char *arg_msg = NULL;
> >> + char *arg_msg = nullptr;
> >> va_list args;
> >> - va_start (args, format);
> >> - ::vasprintf (&arg_msg, format, args);
> >> - va_end (args);
> >> + va_start(args, format);
> >> + ::vasprintf(&arg_msg, format, args);
> >> + va_end(args);
> >>
> >> - if (arg_msg != NULL)
> >> - {
> >> - PrintfWithFlags (LLDB_LOG_FLAG_ERROR, "error: %s", arg_msg);
> >> - free (arg_msg);
> >> - }
> >> + if (arg_msg == nullptr)
> >> + return;
> >> +
> >> + VAPrintf("error: %s", arg_msg);
> >> + free(arg_msg);
> >> }
> >> –
> >> Do you have more commits coming that are going to resolve this problem?
> >>
> >> Sean
> >>
> >>
> >>> On Apr 29, 2015, at 3:55 PM, Zachary Turner <zturner at google.com>
> wrote:
> >>>
> >>> Author: zturner
> >>> Date: Wed Apr 29 17:55:28 2015
> >>> New Revision: 236174
> >>>
> >>> URL: http://llvm.org/viewvc/llvm-project?rev=236174&view=rev
> >>> Log:
> >>> Introduce a NullLog class, which ignores all messages.
> >>>
> >>> The purpose of this class is so that GetLogIfAllCategoriesSet
> >>> can always return an instance of some class, whether it be a real
> >>> logging class or a "null" class, which ignores messages. Code
> >>> that is littered with if statements that only log if the pointer
> >>> is non-null can get very unwieldy very quickly, so this should
> >>> help code readability in such circumstances.
> >>>
> >>> Since I'm in this code anyway, I'm also deleting the
> >>> PrintfWithFlags methods, as well as all the flags, since they
> >>> appear to be dead code that have been superceded by newer
> >>> mechanisms and all the flags are simply ignored.
> >>>
> >>> Added:
> >>> lldb/trunk/include/lldb/Core/NullLog.h
> >>> lldb/trunk/source/Core/NullLog.cpp
> >>> Modified:
> >>> lldb/trunk/include/lldb/Core/Log.h
> >>> lldb/trunk/source/Core/CMakeLists.txt
> >>> lldb/trunk/source/Core/Log.cpp
> >>>
> >>> Modified: lldb/trunk/include/lldb/Core/Log.h
> >>> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Log.h?rev=236174&r1=236173&r2=236174&view=diff
> >>>
> ==============================================================================
> >>> --- lldb/trunk/include/lldb/Core/Log.h (original)
> >>> +++ lldb/trunk/include/lldb/Core/Log.h Wed Apr 29 17:55:28 2015
> >>> @@ -26,17 +26,6 @@
> >>> #include "lldb/Core/PluginInterface.h"
> >>>
> >>>
> //----------------------------------------------------------------------
> >>> -// Logging types
> >>>
> -//----------------------------------------------------------------------
> >>> -#define LLDB_LOG_FLAG_STDOUT (1u << 0)
> >>> -#define LLDB_LOG_FLAG_STDERR (1u << 1)
> >>> -#define LLDB_LOG_FLAG_FATAL (1u << 2)
> >>> -#define LLDB_LOG_FLAG_ERROR (1u << 3)
> >>> -#define LLDB_LOG_FLAG_WARNING (1u << 4)
> >>> -#define LLDB_LOG_FLAG_DEBUG (1u << 5)
> >>> -#define LLDB_LOG_FLAG_VERBOSE (1u << 6)
> >>> -
> >>>
> -//----------------------------------------------------------------------
> >>> // Logging Options
> >>>
> //----------------------------------------------------------------------
> >>> #define LLDB_LOG_OPTION_THREADSAFE (1u << 0)
> >>> @@ -61,12 +50,10 @@ public:
> >>> //------------------------------------------------------------------
> >>> // Callback definitions for abstracted plug-in log access.
> >>> //------------------------------------------------------------------
> >>> - typedef void (*DisableCallback) (const char **categories, Stream
> *feedback_strm);
> >>> - typedef Log * (*EnableCallback) (lldb::StreamSP &log_stream_sp,
> >>> - uint32_t log_options,
> >>> - const char **categories,
> >>> - Stream *feedback_strm);
> >>> - typedef void (*ListCategoriesCallback) (Stream *strm);
> >>> + typedef void (*DisableCallback)(const char **categories, Stream
> *feedback_strm);
> >>> + typedef Log *(*EnableCallback)(lldb::StreamSP &log_stream_sp,
> uint32_t log_options, const char **categories,
> >>> + Stream *feedback_strm);
> >>> + typedef void (*ListCategoriesCallback)(Stream *strm);
> >>>
> >>> struct Callbacks
> >>> {
> >>> @@ -79,86 +66,78 @@ public:
> >>> // Static accessors for logging channels
> >>> //------------------------------------------------------------------
> >>> static void
> >>> - RegisterLogChannel (const ConstString &channel,
> >>> - const Log::Callbacks &log_callbacks);
> >>> + RegisterLogChannel(const ConstString &channel, const
> Log::Callbacks &log_callbacks);
> >>>
> >>> static bool
> >>> - UnregisterLogChannel (const ConstString &channel);
> >>> + UnregisterLogChannel(const ConstString &channel);
> >>>
> >>> static bool
> >>> - GetLogChannelCallbacks (const ConstString &channel,
> >>> - Log::Callbacks &log_callbacks);
> >>> -
> >>> + GetLogChannelCallbacks(const ConstString &channel, Log::Callbacks
> &log_callbacks);
> >>>
> >>> static void
> >>> - EnableAllLogChannels (lldb::StreamSP &log_stream_sp,
> >>> - uint32_t log_options,
> >>> - const char **categories,
> >>> - Stream *feedback_strm);
> >>> + EnableAllLogChannels(lldb::StreamSP &log_stream_sp, uint32_t
> log_options, const char **categories,
> >>> + Stream *feedback_strm);
> >>>
> >>> static void
> >>> - DisableAllLogChannels (Stream *feedback_strm);
> >>> + DisableAllLogChannels(Stream *feedback_strm);
> >>>
> >>> static void
> >>> - ListAllLogChannels (Stream *strm);
> >>> + ListAllLogChannels(Stream *strm);
> >>>
> >>> static void
> >>> - Initialize ();
> >>> + Initialize();
> >>>
> >>> static void
> >>> - Terminate ();
> >>> -
> >>> + Terminate();
> >>> +
> >>> //------------------------------------------------------------------
> >>> // Auto completion
> >>> //------------------------------------------------------------------
> >>> static void
> >>> - AutoCompleteChannelName (const char *channel_name,
> >>> - StringList &matches);
> >>> + AutoCompleteChannelName(const char *channel_name, StringList
> &matches);
> >>>
> >>> //------------------------------------------------------------------
> >>> // Member functions
> >>> //------------------------------------------------------------------
> >>> - Log ();
> >>> + Log();
> >>>
> >>> - Log (const lldb::StreamSP &stream_sp);
> >>> + Log(const lldb::StreamSP &stream_sp);
> >>>
> >>> - ~Log ();
> >>> -
> >>> - void
> >>> - PutCString (const char *cstr);
> >>> + virtual
> >>> + ~Log();
> >>>
> >>> - void
> >>> - Printf (const char *format, ...) __attribute__ ((format (printf,
> 2, 3)));
> >>> + virtual void
> >>> + PutCString(const char *cstr);
> >>>
> >>> - void
> >>> - VAPrintf (const char *format, va_list args);
> >>> + virtual void
> >>> + Printf(const char *format, ...) __attribute__((format(printf, 2,
> 3)));
> >>>
> >>> - void
> >>> - PrintfWithFlags( uint32_t flags, const char *format, ...)
> __attribute__ ((format (printf, 3, 4)));
> >>> + virtual void
> >>> + VAPrintf(const char *format, va_list args);
> >>>
> >>> - void
> >>> - LogIf (uint32_t mask, const char *fmt, ...) __attribute__
> ((format (printf, 3, 4)));
> >>> + virtual void
> >>> + LogIf(uint32_t mask, const char *fmt, ...)
> __attribute__((format(printf, 3, 4)));
> >>>
> >>> - void
> >>> - Debug (const char *fmt, ...) __attribute__ ((format (printf, 2,
> 3)));
> >>> + virtual void
> >>> + Debug(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
> >>>
> >>> - void
> >>> - DebugVerbose (const char *fmt, ...) __attribute__ ((format
> (printf, 2, 3)));
> >>> + virtual void
> >>> + DebugVerbose(const char *fmt, ...) __attribute__((format(printf,
> 2, 3)));
> >>>
> >>> - void
> >>> - Error (const char *fmt, ...) __attribute__ ((format (printf, 2,
> 3)));
> >>> + virtual void
> >>> + Error(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
> >>>
> >>> - void
> >>> - FatalError (int err, const char *fmt, ...) __attribute__
> ((format (printf, 3, 4)));
> >>> + virtual void
> >>> + FatalError(int err, const char *fmt, ...)
> __attribute__((format(printf, 3, 4)));
> >>>
> >>> - void
> >>> - Verbose (const char *fmt, ...) __attribute__ ((format (printf,
> 2, 3)));
> >>> + virtual void
> >>> + Verbose(const char *fmt, ...) __attribute__((format(printf, 2,
> 3)));
> >>>
> >>> - void
> >>> - Warning (const char *fmt, ...) __attribute__ ((format (printf,
> 2, 3)));
> >>> + virtual void
> >>> + Warning(const char *fmt, ...) __attribute__((format(printf, 2,
> 3)));
> >>>
> >>> - void
> >>> - WarningVerbose (const char *fmt, ...) __attribute__ ((format
> (printf, 2, 3)));
> >>> + virtual void
> >>> + WarningVerbose(const char *fmt, ...)
> __attribute__((format(printf, 2, 3)));
> >>>
> >>> Flags &
> >>> GetOptions();
> >>> @@ -179,7 +158,7 @@ public:
> >>> GetDebug() const;
> >>>
> >>> void
> >>> - SetStream (const lldb::StreamSP &stream_sp)
> >>> + SetStream(const lldb::StreamSP &stream_sp)
> >>> {
> >>> m_stream_sp = stream_sp;
> >>> }
> >>> @@ -192,43 +171,35 @@ protected:
> >>> Flags m_options;
> >>> Flags m_mask_bits;
> >>>
> >>> - void
> >>> - PrintfWithFlagsVarArg (uint32_t flags, const char *format,
> va_list args);
> >>> -
> >>> private:
> >>> - DISALLOW_COPY_AND_ASSIGN (Log);
> >>> + DISALLOW_COPY_AND_ASSIGN(Log);
> >>> };
> >>>
> >>>
> >>> class LogChannel : public PluginInterface
> >>> {
> >>> public:
> >>> - LogChannel ();
> >>> + LogChannel();
> >>>
> >>> - virtual
> >>> - ~LogChannel ();
> >>> + virtual ~LogChannel();
> >>>
> >>> - static lldb::LogChannelSP
> >>> - FindPlugin (const char *plugin_name);
> >>> + static lldb::LogChannelSP FindPlugin(const char *plugin_name);
> >>>
> >>> // categories is a an array of chars that ends with a NULL element.
> >>> - virtual void
> >>> - Disable (const char **categories, Stream *feedback_strm) = 0;
> >>> + virtual void Disable(const char **categories, Stream
> *feedback_strm) = 0;
> >>>
> >>> - virtual bool
> >>> - Enable (lldb::StreamSP &log_stream_sp,
> >>> - uint32_t log_options,
> >>> - Stream *feedback_strm, // Feedback stream for
> argument errors etc
> >>> - const char **categories) = 0;// The categories to enable
> within this logging stream, if empty, enable default set
> >>> + virtual bool Enable(
> >>> + lldb::StreamSP &log_stream_sp, uint32_t log_options,
> >>> + Stream *feedback_strm, // Feedback stream for argument
> errors etc
> >>> + const char **categories) = 0; // The categories to enable
> within this logging stream, if empty, enable default set
> >>>
> >>> - virtual void
> >>> - ListCategories (Stream *strm) = 0;
> >>> + virtual void ListCategories(Stream *strm) = 0;
> >>>
> >>> protected:
> >>> std::unique_ptr<Log> m_log_ap;
> >>>
> >>> private:
> >>> - DISALLOW_COPY_AND_ASSIGN (LogChannel);
> >>> + DISALLOW_COPY_AND_ASSIGN(LogChannel);
> >>> };
> >>>
> >>>
> >>>
> >>> Added: lldb/trunk/include/lldb/Core/NullLog.h
> >>> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/NullLog.h?rev=236174&view=auto
> >>>
> ==============================================================================
> >>> --- lldb/trunk/include/lldb/Core/NullLog.h (added)
> >>> +++ lldb/trunk/include/lldb/Core/NullLog.h Wed Apr 29 17:55:28 2015
> >>> @@ -0,0 +1,58 @@
> >>> +//===-- NullLog.h -----------------------------------------------*-
> C++ -*-===//
> >>> +//
> >>> +// The LLVM Compiler Infrastructure
> >>> +//
> >>> +// This file is distributed under the University of Illinois Open
> Source
> >>> +// License. See LICENSE.TXT for details.
> >>> +//
> >>>
> +//===----------------------------------------------------------------------===//
> >>> +
> >>> +#ifndef liblldb_Core_NullLog_H_
> >>> +#define liblldb_Core_NullLog_H_
> >>> +
> >>> +#include "lldb/Core/Log.h"
> >>> +
> >>>
> +//----------------------------------------------------------------------
> >>> +// Logging Functions
> >>>
> +//----------------------------------------------------------------------
> >>> +namespace lldb_private
> >>> +{
> >>> +
> >>> +class NullLog : public Log
> >>> +{
> >>> + NullLog(NullLog &) = delete;
> >>> + NullLog &operator=(NullLog &) = delete;
> >>> +
> >>> + public:
> >>> +
> //------------------------------------------------------------------
> >>> + // Member functions
> >>> +
> //------------------------------------------------------------------
> >>> + NullLog();
> >>> + ~NullLog();
> >>> +
> >>> + void PutCString(const char *cstr) override;
> >>> +
> >>> + void Printf(const char *format, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +
> >>> + void VAPrintf(const char *format, va_list args) override;
> >>> +
> >>> + void LogIf(uint32_t mask, const char *fmt, ...) override
> __attribute__((format(printf, 3, 4)));
> >>> +
> >>> + void Debug(const char *fmt, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +
> >>> + void DebugVerbose(const char *fmt, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +
> >>> + void Error(const char *fmt, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +
> >>> + void FatalError(int err, const char *fmt, ...) override
> __attribute__((format(printf, 3, 4)));
> >>> +
> >>> + void Verbose(const char *fmt, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +
> >>> + void Warning(const char *fmt, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +
> >>> + void WarningVerbose(const char *fmt, ...) override
> __attribute__((format(printf, 2, 3)));
> >>> +};
> >>> +
> >>> +} // namespace lldb_private
> >>> +
> >>> +#endif // liblldb_Core_NullLog_H_
> >>>
> >>> Modified: lldb/trunk/source/Core/CMakeLists.txt
> >>> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/CMakeLists.txt?rev=236174&r1=236173&r2=236174&view=diff
> >>>
> ==============================================================================
> >>> --- lldb/trunk/source/Core/CMakeLists.txt (original)
> >>> +++ lldb/trunk/source/Core/CMakeLists.txt Wed Apr 29 17:55:28 2015
> >>> @@ -38,6 +38,7 @@ add_lldb_library(lldbCore
> >>> Module.cpp
> >>> ModuleChild.cpp
> >>> ModuleList.cpp
> >>> + NullLog.cpp
> >>> Opcode.cpp
> >>> PluginManager.cpp
> >>> RegisterValue.cpp
> >>>
> >>> Modified: lldb/trunk/source/Core/Log.cpp
> >>> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Log.cpp?rev=236174&r1=236173&r2=236174&view=diff
> >>>
> ==============================================================================
> >>> --- lldb/trunk/source/Core/Log.cpp (original)
> >>> +++ lldb/trunk/source/Core/Log.cpp Wed Apr 29 17:55:28 2015
> >>> @@ -77,6 +77,23 @@ Log::GetMask() const
> >>> return m_mask_bits;
> >>> }
> >>>
> >>> +void
> >>> +Log::PutCString(const char *cstr)
> >>> +{
> >>> + Printf("%s", cstr);
> >>> +}
> >>> +
> >>>
> +//----------------------------------------------------------------------
> >>> +// Simple variable argument logging with flags.
> >>>
> +//----------------------------------------------------------------------
> >>> +void
> >>> +Log::Printf(const char *format, ...)
> >>> +{
> >>> + va_list args;
> >>> + va_start(args, format);
> >>> + VAPrintf(format, args);
> >>> + va_end(args);
> >>> +}
> >>>
> >>>
> //----------------------------------------------------------------------
> >>> // All logging eventually boils down to this function call. If we have
> >>> @@ -84,7 +101,7 @@ Log::GetMask() const
> >>> // a valid file handle, we also log to the file.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::PrintfWithFlagsVarArg (uint32_t flags, const char *format,
> va_list args)
> >>> +Log::VAPrintf(const char *format, va_list args)
> >>> {
> >>> // Make a copy of our stream shared pointer in case someone disables
> our
> >>> // log while we are logging and releases the stream
> >>> @@ -136,59 +153,20 @@ Log::PrintfWithFlagsVarArg (uint32_t fla
> >>> }
> >>> }
> >>>
> >>> -
> >>> -void
> >>> -Log::PutCString (const char *cstr)
> >>> -{
> >>> - Printf ("%s", cstr);
> >>> -}
> >>> -
> >>> -
> >>>
> -//----------------------------------------------------------------------
> >>> -// Simple variable argument logging with flags.
> >>>
> -//----------------------------------------------------------------------
> >>> -void
> >>> -Log::Printf(const char *format, ...)
> >>> -{
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - PrintfWithFlagsVarArg (0, format, args);
> >>> - va_end (args);
> >>> -}
> >>> -
> >>> -void
> >>> -Log::VAPrintf (const char *format, va_list args)
> >>> -{
> >>> - PrintfWithFlagsVarArg (0, format, args);
> >>> -}
> >>> -
> >>> -
> >>>
> -//----------------------------------------------------------------------
> >>> -// Simple variable argument logging with flags.
> >>>
> -//----------------------------------------------------------------------
> >>> -void
> >>> -Log::PrintfWithFlags (uint32_t flags, const char *format, ...)
> >>> -{
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - PrintfWithFlagsVarArg (flags, format, args);
> >>> - va_end (args);
> >>> -}
> >>> -
> >>>
> //----------------------------------------------------------------------
> >>> // Print debug strings if and only if the global debug option is set to
> >>> // a non-zero value.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::Debug (const char *format, ...)
> >>> +Log::Debug(const char *format, ...)
> >>> {
> >>> - if (GetOptions().Test(LLDB_LOG_OPTION_DEBUG))
> >>> - {
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - PrintfWithFlagsVarArg (LLDB_LOG_FLAG_DEBUG, format, args);
> >>> - va_end (args);
> >>> - }
> >>> + if (!GetOptions().Test(LLDB_LOG_OPTION_DEBUG))
> >>> + return;
> >>> +
> >>> + va_list args;
> >>> + va_start(args, format);
> >>> + VAPrintf(format, args);
> >>> + va_end(args);
> >>> }
> >>>
> >>>
> >>> @@ -197,15 +175,15 @@ Log::Debug (const char *format, ...)
> >>> // a non-zero value.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::DebugVerbose (const char *format, ...)
> >>> +Log::DebugVerbose(const char *format, ...)
> >>> {
> >>> - if (GetOptions().AllSet (LLDB_LOG_OPTION_DEBUG |
> LLDB_LOG_OPTION_VERBOSE))
> >>> - {
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - PrintfWithFlagsVarArg (LLDB_LOG_FLAG_DEBUG |
> LLDB_LOG_FLAG_VERBOSE, format, args);
> >>> - va_end (args);
> >>> - }
> >>> + if (!GetOptions().AllSet(LLDB_LOG_OPTION_DEBUG |
> LLDB_LOG_OPTION_VERBOSE))
> >>> + return;
> >>> +
> >>> + va_list args;
> >>> + va_start(args, format);
> >>> + VAPrintf(format, args);
> >>> + va_end(args);
> >>> }
> >>>
> >>>
> >>> @@ -213,34 +191,34 @@ Log::DebugVerbose (const char *format, .
> >>> // Log only if all of the bits are set
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::LogIf (uint32_t bits, const char *format, ...)
> >>> +Log::LogIf(uint32_t bits, const char *format, ...)
> >>> {
> >>> - if (m_options.AllSet (bits))
> >>> - {
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - PrintfWithFlagsVarArg (0, format, args);
> >>> - va_end (args);
> >>> - }
> >>> + if (!m_options.AllSet(bits))
> >>> + return;
> >>> +
> >>> + va_list args;
> >>> + va_start(args, format);
> >>> + VAPrintf(format, args);
> >>> + va_end(args);
> >>> }
> >>>
> >>>
> //----------------------------------------------------------------------
> >>> // Printing of errors that are not fatal.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::Error (const char *format, ...)
> >>> +Log::Error(const char *format, ...)
> >>> {
> >>> - char *arg_msg = NULL;
> >>> + char *arg_msg = nullptr;
> >>> va_list args;
> >>> - va_start (args, format);
> >>> - ::vasprintf (&arg_msg, format, args);
> >>> - va_end (args);
> >>> + va_start(args, format);
> >>> + ::vasprintf(&arg_msg, format, args);
> >>> + va_end(args);
> >>>
> >>> - if (arg_msg != NULL)
> >>> - {
> >>> - PrintfWithFlags (LLDB_LOG_FLAG_ERROR, "error: %s", arg_msg);
> >>> - free (arg_msg);
> >>> - }
> >>> + if (arg_msg == nullptr)
> >>> + return;
> >>> +
> >>> + VAPrintf("error: %s", arg_msg);
> >>> + free(arg_msg);
> >>> }
> >>>
> >>>
> //----------------------------------------------------------------------
> >>> @@ -248,20 +226,20 @@ Log::Error (const char *format, ...)
> >>> // immediately.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::FatalError (int err, const char *format, ...)
> >>> +Log::FatalError(int err, const char *format, ...)
> >>> {
> >>> - char *arg_msg = NULL;
> >>> + char *arg_msg = nullptr;
> >>> va_list args;
> >>> - va_start (args, format);
> >>> - ::vasprintf (&arg_msg, format, args);
> >>> - va_end (args);
> >>> + va_start(args, format);
> >>> + ::vasprintf(&arg_msg, format, args);
> >>> + va_end(args);
> >>>
> >>> - if (arg_msg != NULL)
> >>> + if (arg_msg != nullptr)
> >>> {
> >>> - PrintfWithFlags (LLDB_LOG_FLAG_ERROR | LLDB_LOG_FLAG_FATAL,
> "error: %s", arg_msg);
> >>> - ::free (arg_msg);
> >>> + VAPrintf("error: %s", arg_msg);
> >>> + ::free(arg_msg);
> >>> }
> >>> - ::exit (err);
> >>> + ::exit(err);
> >>> }
> >>>
> >>>
> >>> @@ -270,15 +248,15 @@ Log::FatalError (int err, const char *fo
> >>> // enabled.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::Verbose (const char *format, ...)
> >>> +Log::Verbose(const char *format, ...)
> >>> {
> >>> - if (m_options.Test(LLDB_LOG_OPTION_VERBOSE))
> >>> - {
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - PrintfWithFlagsVarArg (LLDB_LOG_FLAG_VERBOSE, format, args);
> >>> - va_end (args);
> >>> - }
> >>> + if (!m_options.Test(LLDB_LOG_OPTION_VERBOSE))
> >>> + return;
> >>> +
> >>> + va_list args;
> >>> + va_start(args, format);
> >>> + VAPrintf(format, args);
> >>> + va_end(args);
> >>> }
> >>>
> >>>
> //----------------------------------------------------------------------
> >>> @@ -286,40 +264,40 @@ Log::Verbose (const char *format, ...)
> >>> // enabled.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::WarningVerbose (const char *format, ...)
> >>> +Log::WarningVerbose(const char *format, ...)
> >>> {
> >>> - if (m_options.Test(LLDB_LOG_OPTION_VERBOSE))
> >>> - {
> >>> - char *arg_msg = NULL;
> >>> - va_list args;
> >>> - va_start (args, format);
> >>> - ::vasprintf (&arg_msg, format, args);
> >>> - va_end (args);
> >>> + if (!m_options.Test(LLDB_LOG_OPTION_VERBOSE))
> >>> + return;
> >>>
> >>> - if (arg_msg != NULL)
> >>> - {
> >>> - PrintfWithFlags (LLDB_LOG_FLAG_WARNING |
> LLDB_LOG_FLAG_VERBOSE, "warning: %s", arg_msg);
> >>> - free (arg_msg);
> >>> - }
> >>> - }
> >>> + char *arg_msg = nullptr;
> >>> + va_list args;
> >>> + va_start(args, format);
> >>> + ::vasprintf(&arg_msg, format, args);
> >>> + va_end(args);
> >>> +
> >>> + if (arg_msg == nullptr)
> >>> + return;
> >>> +
> >>> + VAPrintf("warning: %s", arg_msg);
> >>> + free(arg_msg);
> >>> }
> >>>
> //----------------------------------------------------------------------
> >>> // Printing of warnings that are not fatal.
> >>>
> //----------------------------------------------------------------------
> >>> void
> >>> -Log::Warning (const char *format, ...)
> >>> +Log::Warning(const char *format, ...)
> >>> {
> >>> - char *arg_msg = NULL;
> >>> + char *arg_msg = nullptr;
> >>> va_list args;
> >>> - va_start (args, format);
> >>> - ::vasprintf (&arg_msg, format, args);
> >>> - va_end (args);
> >>> + va_start(args, format);
> >>> + ::vasprintf(&arg_msg, format, args);
> >>> + va_end(args);
> >>>
> >>> - if (arg_msg != NULL)
> >>> - {
> >>> - PrintfWithFlags (LLDB_LOG_FLAG_WARNING, "warning: %s",
> arg_msg);
> >>> - free (arg_msg);
> >>> - }
> >>> + if (arg_msg == nullptr)
> >>> + return;
> >>> +
> >>> + VAPrintf("warning: %s", arg_msg);
> >>> + free(arg_msg);
> >>> }
> >>>
> >>> typedef std::map <ConstString, Log::Callbacks> CallbackMap;
> >>>
> >>> Added: lldb/trunk/source/Core/NullLog.cpp
> >>> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/NullLog.cpp?rev=236174&view=auto
> >>>
> ==============================================================================
> >>> --- lldb/trunk/source/Core/NullLog.cpp (added)
> >>> +++ lldb/trunk/source/Core/NullLog.cpp Wed Apr 29 17:55:28 2015
> >>> @@ -0,0 +1,74 @@
> >>> +//===-- NullLog.cpp ---------------------------------------------*-
> C++ -*-===//
> >>> +//
> >>> +// The LLVM Compiler Infrastructure
> >>> +//
> >>> +// This file is distributed under the University of Illinois Open
> Source
> >>> +// License. See LICENSE.TXT for details.
> >>> +//
> >>>
> +//===----------------------------------------------------------------------===//
> >>> +
> >>> +#include "lldb/Core/NullLog.h"
> >>> +
> >>> +using namespace lldb_private;
> >>> +
> >>> +NullLog::NullLog()
> >>> +{
> >>> +}
> >>> +NullLog::~NullLog()
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::PutCString(const char *cstr)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::Printf(const char *format, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::VAPrintf(const char *format, va_list args)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::LogIf(uint32_t mask, const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::Debug(const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::DebugVerbose(const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::Error(const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::FatalError(int err, const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::Verbose(const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::Warning(const char *fmt, ...)
> >>> +{
> >>> +}
> >>> +
> >>> +void
> >>> +NullLog::WarningVerbose(const char *fmt, ...)
> >>> +{
> >>> +}
> >>>
> >>>
> >>> _______________________________________________
> >>> lldb-commits mailing list
> >>> lldb-commits at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> >>
> >>
> >> _______________________________________________
> >> lldb-commits mailing list
> >> lldb-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> >
> >
> > _______________________________________________
> > lldb-commits mailing list
> > lldb-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> >
> > Thanks,
> > - Enrico
> > 📩 egranata@.com ☎️ 27683
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150430/97f21471/attachment.html>
More information about the lldb-commits
mailing list