diff options
Diffstat (limited to 'source/Plugins/Process/Windows/Common/ProcessWindowsLog.h')
| -rw-r--r-- | source/Plugins/Process/Windows/Common/ProcessWindowsLog.h | 96 | 
1 files changed, 96 insertions, 0 deletions
| diff --git a/source/Plugins/Process/Windows/Common/ProcessWindowsLog.h b/source/Plugins/Process/Windows/Common/ProcessWindowsLog.h new file mode 100644 index 0000000000000..d798d131faebd --- /dev/null +++ b/source/Plugins/Process/Windows/Common/ProcessWindowsLog.h @@ -0,0 +1,96 @@ +//===-- ProcessWindowsLog.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_ProcessWindowsLog_h_ +#define liblldb_ProcessWindowsLog_h_ + +#include "lldb/Core/Log.h" + +#define WINDOWS_LOG_VERBOSE     (1u << 0) +#define WINDOWS_LOG_PROCESS     (1u << 1)    // Log process operations +#define WINDOWS_LOG_EXCEPTION   (1u << 1)    // Log exceptions +#define WINDOWS_LOG_THREAD      (1u << 2)    // Log thread operations +#define WINDOWS_LOG_MEMORY      (1u << 3)    // Log memory reads/writes calls +#define WINDOWS_LOG_BREAKPOINTS (1u << 4)    // Log breakpoint operations +#define WINDOWS_LOG_STEP        (1u << 5)    // Log step operations +#define WINDOWS_LOG_REGISTERS   (1u << 6)    // Log register operations +#define WINDOWS_LOG_EVENT       (1u << 7)    // Low level debug events +#define WINDOWS_LOG_ALL         (UINT32_MAX) + +enum class LogMaskReq +{ +    All, +    Any +}; + +class ProcessWindowsLog +{ +    static const char *m_pluginname; + +public: +    // --------------------------------------------------------------------- +    // Public Static Methods +    // --------------------------------------------------------------------- +    static void +    Initialize(); + +    static void +    Terminate(); + +    static void +    RegisterPluginName(const char *pluginName) +    { +        m_pluginname = pluginName; +    } + +    static void +    RegisterPluginName(lldb_private::ConstString pluginName) +    { +        m_pluginname = pluginName.GetCString(); +    } + +    static bool +    TestLogFlags(uint32_t mask, LogMaskReq req); + +    static lldb_private::Log * +    GetLog(); + +    static void +    DisableLog(const char **args, lldb_private::Stream *feedback_strm); + +    static lldb_private::Log * +    EnableLog(lldb::StreamSP &log_stream_sp, uint32_t log_options, +               const char **args, lldb_private::Stream *feedback_strm); + +    static void +    ListLogCategories(lldb_private::Stream *strm); +}; + +#define WINLOGF_IF(Flags, Req, Method, ...)              \ +    {                                                    \ +        if (ProcessWindowsLog::TestLogFlags(Flags, Req)) \ +        {                                                \ +            Log *log = ProcessWindowsLog::GetLog();      \ +            if (log)                                     \ +                log->Method(__VA_ARGS__);                \ +        }                                                \ +    } + +#define WINLOG_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Printf, __VA_ARGS__) +#define WINLOG_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Printf, __VA_ARGS__) +#define WINLOGV_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Verbose, __VA_ARGS__) +#define WINLOGV_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Verbose, __VA_ARGS__) +#define WINLOGD_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Debug, __VA_ARGS__) +#define WINLOGD_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Debug, __VA_ARGS__) +#define WINERR_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Error, __VA_ARGS__) +#define WINERR_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Error, __VA_ARGS__) +#define WINWARN_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Warning, __VA_ARGS__) +#define WINWARN_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Warning, __VA_ARGS__) + +#endif  // liblldb_ProcessWindowsLog_h_ | 
