diff options
Diffstat (limited to 'lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h')
| -rw-r--r-- | lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h new file mode 100644 index 000000000000..5dcb37b04eaa --- /dev/null +++ b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h @@ -0,0 +1,164 @@ +//===-- StructuredDataDarwinLog.h -------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + +#ifndef StructuredDataDarwinLog_h +#define StructuredDataDarwinLog_h + +#include "lldb/Target/StructuredDataPlugin.h" + +#include <mutex> + +// Forward declarations +namespace sddarwinlog_private +{ + class EnableCommand; +} + +namespace lldb_private +{ + +class StructuredDataDarwinLog : public StructuredDataPlugin +{ + friend sddarwinlog_private::EnableCommand; + +public: + + // ------------------------------------------------------------------------- + // Public static API + // ------------------------------------------------------------------------- + + static void + Initialize(); + + static void + Terminate(); + + static const ConstString& + GetStaticPluginName(); + + // ------------------------------------------------------------------------- + /// Return whether the DarwinLog functionality is enabled. + /// + /// The DarwinLog functionality is enabled if the user expicitly enabled + /// it with the enable command, or if the user has the setting set + /// that controls if we always enable it for newly created/attached + /// processes. + /// + /// @return + /// True if DarwinLog support is/will be enabled for existing or + /// newly launched/attached processes. + // ------------------------------------------------------------------------- + static bool + IsEnabled(); + + // ------------------------------------------------------------------------- + // PluginInterface API + // ------------------------------------------------------------------------- + + ConstString + GetPluginName() override; + + uint32_t + GetPluginVersion() override; + + // ------------------------------------------------------------------------- + // StructuredDataPlugin API + // ------------------------------------------------------------------------- + + bool + SupportsStructuredDataType(const ConstString &type_name) override; + + void + HandleArrivalOfStructuredData(Process &process, + const ConstString &type_name, + const StructuredData::ObjectSP + &object_sp) override; + + Error + GetDescription(const StructuredData::ObjectSP &object_sp, + lldb_private::Stream &stream) override; + + + bool + GetEnabled(const ConstString &type_name) const override; + + void + ModulesDidLoad(Process &process, ModuleList &module_list) override; + +private: + + // ------------------------------------------------------------------------- + // Private constructors + // ------------------------------------------------------------------------- + + StructuredDataDarwinLog(const lldb::ProcessWP &process_wp); + + // ------------------------------------------------------------------------- + // Private static methods + // ------------------------------------------------------------------------- + + static lldb::StructuredDataPluginSP + CreateInstance(Process &process); + + static void + DebuggerInitialize(Debugger &debugger); + + static bool + InitCompletionHookCallback(void *baton, StoppointCallbackContext *context, + lldb::user_id_t break_id, + lldb::user_id_t break_loc_id); + + static Error + FilterLaunchInfo(ProcessLaunchInfo &launch_info, Target *target); + + // ------------------------------------------------------------------------- + // Internal helper methods used by friend classes + // ------------------------------------------------------------------------- + void + SetEnabled(bool enabled); + + void + AddInitCompletionHook(Process &process); + + // ------------------------------------------------------------------------- + // Private methods + // ------------------------------------------------------------------------- + + void + DumpTimestamp(Stream &stream, uint64_t timestamp); + + size_t + DumpHeader(Stream &stream, const StructuredData::Dictionary &event); + + size_t + HandleDisplayOfEvent(const StructuredData::Dictionary &event, + Stream &stream); + + // ------------------------------------------------------------------------- + /// Call the enable command again, using whatever settings were initially + /// made. + // ------------------------------------------------------------------------- + + void + EnableNow(); + + // ------------------------------------------------------------------------- + // Private data + // ------------------------------------------------------------------------- + bool m_recorded_first_timestamp; + uint64_t m_first_timestamp_seen; + bool m_is_enabled; + std::mutex m_added_breakpoint_mutex; + bool m_added_breakpoint; +}; + +} + +#endif /* StructuredDataPluginDarwinLog_hpp */ |
