[Lldb-commits] [lldb] r236174 - Introduce a NullLog class, which ignores all messages.

Zachary Turner zturner at google.com
Wed Apr 29 18:11:11 PDT 2015


By the way, maybe obvious, but the only additional cost associated with
this is the cost of calculating the arguments.  There's no cost associated
with printing (like formatting the string for example) because the virtual
method that takes variable arguments also does nothing with its arguments.

On Wed, Apr 29, 2015 at 6:08 PM Zachary Turner <zturner at google.com> wrote:

> I actually considered this, and I think it won't be an issue in practice.
>
> There's no code that actually uses this or returns a Log& yet.  I am in
> the process of adding logging to ProcessWindows, and that *does* use this,
> but it's an implementation detail of ProcessWindows.  None of the existing
> global methods like lldb_private::GetLogIfAllCategoriesSet() have been
> changed, nor has any of the logging code in other plugins or any of the
> call sites.  If I were to make a change like this globally across the
> board, it would create prohibitive code churn for not much benefit.  And as
> you point out, in some cases the code would be worse.
>
> So you can think of this as an opt-in thing.  It seems useful in general
> when computing the arguments to the logging statements is trivial, so in
> those cases we can just have a different Get method.  Right now we have
> GetLogIfAllCategoriesSet() and GetLogIfAnyCategoriesSet.  We could just
> have GetLogIfAllCategoriesSet2() and GetLogIfAnyCategoriesSet2()  (names
> not final, obviously) that return references.
>
> Anyone who wants to continue using the pointer versions is free to do so,
> so I think that alleviates any concerns surrounding the performance
> implications.
>
> On Wed, Apr 29, 2015 at 5:58 PM <jingham at apple.com> wrote:
>
>> 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
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150430/91755465/attachment.html>


More information about the lldb-commits mailing list