1*f6aab3d8Srobert //===-- LLDBLog.cpp -------------------------------------------------------===//
2*f6aab3d8Srobert //
3*f6aab3d8Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f6aab3d8Srobert // See https://llvm.org/LICENSE.txt for license information.
5*f6aab3d8Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f6aab3d8Srobert //
7*f6aab3d8Srobert //===----------------------------------------------------------------------===//
8*f6aab3d8Srobert
9*f6aab3d8Srobert #include "lldb/Utility/LLDBLog.h"
10*f6aab3d8Srobert #include "lldb/Utility/Log.h"
11*f6aab3d8Srobert #include "llvm/ADT/ArrayRef.h"
12*f6aab3d8Srobert #include <cstdarg>
13*f6aab3d8Srobert
14*f6aab3d8Srobert using namespace lldb_private;
15*f6aab3d8Srobert
16*f6aab3d8Srobert static constexpr Log::Category g_categories[] = {
17*f6aab3d8Srobert {{"api"}, {"log API calls and return values"}, LLDBLog::API},
18*f6aab3d8Srobert {{"ast"}, {"log AST"}, LLDBLog::AST},
19*f6aab3d8Srobert {{"break"}, {"log breakpoints"}, LLDBLog::Breakpoints},
20*f6aab3d8Srobert {{"commands"}, {"log command argument parsing"}, LLDBLog::Commands},
21*f6aab3d8Srobert {{"comm"}, {"log communication activities"}, LLDBLog::Communication},
22*f6aab3d8Srobert {{"conn"}, {"log connection details"}, LLDBLog::Connection},
23*f6aab3d8Srobert {{"demangle"},
24*f6aab3d8Srobert {"log mangled names to catch demangler crashes"},
25*f6aab3d8Srobert LLDBLog::Demangle},
26*f6aab3d8Srobert {{"dyld"},
27*f6aab3d8Srobert {"log shared library related activities"},
28*f6aab3d8Srobert LLDBLog::DynamicLoader},
29*f6aab3d8Srobert {{"event"},
30*f6aab3d8Srobert {"log broadcaster, listener and event queue activities"},
31*f6aab3d8Srobert LLDBLog::Events},
32*f6aab3d8Srobert {{"expr"}, {"log expressions"}, LLDBLog::Expressions},
33*f6aab3d8Srobert {{"formatters"},
34*f6aab3d8Srobert {"log data formatters related activities"},
35*f6aab3d8Srobert LLDBLog::DataFormatters},
36*f6aab3d8Srobert {{"host"}, {"log host activities"}, LLDBLog::Host},
37*f6aab3d8Srobert {{"jit"}, {"log JIT events in the target"}, LLDBLog::JITLoader},
38*f6aab3d8Srobert {{"language"}, {"log language runtime events"}, LLDBLog::Language},
39*f6aab3d8Srobert {{"mmap"}, {"log mmap related activities"}, LLDBLog::MMap},
40*f6aab3d8Srobert {{"module"},
41*f6aab3d8Srobert {"log module activities such as when modules are created, destroyed, "
42*f6aab3d8Srobert "replaced, and more"},
43*f6aab3d8Srobert LLDBLog::Modules},
44*f6aab3d8Srobert {{"object"},
45*f6aab3d8Srobert {"log object construction/destruction for important objects"},
46*f6aab3d8Srobert LLDBLog::Object},
47*f6aab3d8Srobert {{"os"}, {"log OperatingSystem plugin related activities"}, LLDBLog::OS},
48*f6aab3d8Srobert {{"platform"}, {"log platform events and activities"}, LLDBLog::Platform},
49*f6aab3d8Srobert {{"process"}, {"log process events and activities"}, LLDBLog::Process},
50*f6aab3d8Srobert {{"script"}, {"log events about the script interpreter"}, LLDBLog::Script},
51*f6aab3d8Srobert {{"state"},
52*f6aab3d8Srobert {"log private and public process state changes"},
53*f6aab3d8Srobert LLDBLog::State},
54*f6aab3d8Srobert {{"step"}, {"log step related activities"}, LLDBLog::Step},
55*f6aab3d8Srobert {{"symbol"}, {"log symbol related issues and warnings"}, LLDBLog::Symbols},
56*f6aab3d8Srobert {{"system-runtime"}, {"log system runtime events"}, LLDBLog::SystemRuntime},
57*f6aab3d8Srobert {{"target"}, {"log target events and activities"}, LLDBLog::Target},
58*f6aab3d8Srobert {{"temp"}, {"log internal temporary debug messages"}, LLDBLog::Temporary},
59*f6aab3d8Srobert {{"thread"}, {"log thread events and activities"}, LLDBLog::Thread},
60*f6aab3d8Srobert {{"types"}, {"log type system related activities"}, LLDBLog::Types},
61*f6aab3d8Srobert {{"unwind"}, {"log stack unwind activities"}, LLDBLog::Unwind},
62*f6aab3d8Srobert {{"watch"}, {"log watchpoint related activities"}, LLDBLog::Watchpoints},
63*f6aab3d8Srobert {{"on-demand"},
64*f6aab3d8Srobert {"log symbol on-demand related activities"},
65*f6aab3d8Srobert LLDBLog::OnDemand},
66*f6aab3d8Srobert };
67*f6aab3d8Srobert
68*f6aab3d8Srobert static Log::Channel g_log_channel(g_categories,
69*f6aab3d8Srobert LLDBLog::Process | LLDBLog::Thread |
70*f6aab3d8Srobert LLDBLog::DynamicLoader |
71*f6aab3d8Srobert LLDBLog::Breakpoints |
72*f6aab3d8Srobert LLDBLog::Watchpoints | LLDBLog::Step |
73*f6aab3d8Srobert LLDBLog::State | LLDBLog::Symbols |
74*f6aab3d8Srobert LLDBLog::Target | LLDBLog::Commands);
75*f6aab3d8Srobert
LogChannelFor()76*f6aab3d8Srobert template <> Log::Channel &lldb_private::LogChannelFor<LLDBLog>() {
77*f6aab3d8Srobert return g_log_channel;
78*f6aab3d8Srobert }
79*f6aab3d8Srobert
InitializeLldbChannel()80*f6aab3d8Srobert void lldb_private::InitializeLldbChannel() {
81*f6aab3d8Srobert Log::Register("lldb", g_log_channel);
82*f6aab3d8Srobert }
83