1 //===-- ThreadPlanTracer.h --------------------------------------------*- C++
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_ThreadPlanTracer_h_
11 #define liblldb_ThreadPlanTracer_h_
13 #include "lldb/Symbol/TaggedASTType.h"
14 #include "lldb/Target/Thread.h"
15 #include "lldb/Utility/RegisterValue.h"
16 #include "lldb/lldb-private.h"
18 namespace lldb_private {
20 class ThreadPlanTracer {
21 friend class ThreadPlan;
24 enum ThreadPlanTracerStyle {
31 ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
32 ThreadPlanTracer(Thread &thread);
34 virtual ~ThreadPlanTracer() = default;
36 virtual void TracingStarted() {}
38 virtual void TracingEnded() {}
40 bool EnableTracing(bool value) {
41 bool old_value = m_enabled;
43 if (old_value == false && value == true)
45 else if (old_value == true && value == false)
51 bool TracingEnabled() { return m_enabled; }
53 bool EnableSingleStep(bool value) {
54 bool old_value = m_single_step;
55 m_single_step = value;
59 bool SingleStepEnabled() { return m_single_step; }
64 Stream *GetLogStream();
69 bool TracerExplainsStop();
73 lldb::StreamSP m_stream_sp;
76 class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
78 ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
79 ThreadPlanAssemblyTracer(Thread &thread);
80 ~ThreadPlanAssemblyTracer() override;
82 void TracingStarted() override;
83 void TracingEnded() override;
87 Disassembler *GetDisassembler();
89 TypeFromUser GetIntPointerType();
91 lldb::DisassemblerSP m_disassembler_sp;
92 TypeFromUser m_intptr_type;
93 std::vector<RegisterValue> m_register_values;
94 lldb::DataBufferSP m_buffer_sp;
97 } // namespace lldb_private
99 #endif // liblldb_ThreadPlanTracer_h_