File indexing completed on 2026-05-10 08:42:57
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_UTILITY_DIAGNOSTICS_H
0010 #define LLDB_UTILITY_DIAGNOSTICS_H
0011
0012 #include "lldb/Utility/FileSpec.h"
0013 #include "lldb/Utility/Log.h"
0014 #include "llvm/ADT/SmallVector.h"
0015 #include "llvm/ADT/StringSet.h"
0016 #include "llvm/Support/Error.h"
0017
0018 #include <functional>
0019 #include <mutex>
0020 #include <optional>
0021 #include <vector>
0022
0023 namespace lldb_private {
0024
0025
0026
0027
0028 class Diagnostics {
0029 public:
0030 Diagnostics();
0031 ~Diagnostics();
0032
0033
0034 llvm::Error Create(const FileSpec &dir);
0035
0036
0037
0038 bool Dump(llvm::raw_ostream &stream);
0039 bool Dump(llvm::raw_ostream &stream, const FileSpec &dir);
0040
0041
0042 void Report(llvm::StringRef message);
0043
0044 using Callback = std::function<llvm::Error(const FileSpec &)>;
0045 using CallbackID = uint64_t;
0046
0047 CallbackID AddCallback(Callback callback);
0048 void RemoveCallback(CallbackID id);
0049
0050 static Diagnostics &Instance();
0051
0052 static bool Enabled();
0053 static void Initialize();
0054 static void Terminate();
0055
0056
0057 static llvm::Expected<FileSpec> CreateUniqueDirectory();
0058
0059 private:
0060 static std::optional<Diagnostics> &InstanceImpl();
0061
0062 llvm::Error DumpDiangosticsLog(const FileSpec &dir) const;
0063
0064 RotatingLogHandler m_log_handler;
0065
0066 struct CallbackEntry {
0067 CallbackEntry(CallbackID id, Callback callback)
0068 : id(id), callback(std::move(callback)) {}
0069 CallbackID id;
0070 Callback callback;
0071 };
0072
0073
0074
0075 CallbackID m_callback_id;
0076
0077
0078 llvm::SmallVector<CallbackEntry, 4> m_callbacks;
0079
0080
0081 std::mutex m_callbacks_mutex;
0082 };
0083
0084 }
0085
0086 #endif