1 //===-- ThreadPlanTracer.h --------------------------------------------*- C++
4 // The LLVM Compiler Infrastructure
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
9 //===----------------------------------------------------------------------===//
11 #ifndef liblldb_ThreadPlanTracer_h_
12 #define liblldb_ThreadPlanTracer_h_
16 // Other libraries and framework includes
18 #include "lldb/Core/RegisterValue.h"
19 #include "lldb/Symbol/TaggedASTType.h"
20 #include "lldb/Target/Thread.h"
21 #include "lldb/lldb-private.h"
23 namespace lldb_private {
25 class ThreadPlanTracer {
26 friend class ThreadPlan;
29 typedef enum ThreadPlanTracerStyle {
34 } ThreadPlanTracerStyle;
36 ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
37 ThreadPlanTracer(Thread &thread);
39 virtual ~ThreadPlanTracer() = default;
41 virtual void TracingStarted() {}
43 virtual void TracingEnded() {}
45 bool EnableTracing(bool value) {
46 bool old_value = m_enabled;
48 if (old_value == false && value == true)
50 else if (old_value == true && value == false)
56 bool TracingEnabled() { return m_enabled; }
58 bool EnableSingleStep(bool value) {
59 bool old_value = m_single_step;
60 m_single_step = value;
64 bool SingleStepEnabled() { return m_single_step; }
69 Stream *GetLogStream();
74 bool TracerExplainsStop();
78 lldb::StreamSP m_stream_sp;
81 class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
83 ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
84 ThreadPlanAssemblyTracer(Thread &thread);
85 ~ThreadPlanAssemblyTracer() override;
87 void TracingStarted() override;
88 void TracingEnded() override;
92 Disassembler *GetDisassembler();
94 TypeFromUser GetIntPointerType();
96 lldb::DisassemblerSP m_disassembler_sp;
97 TypeFromUser m_intptr_type;
98 std::vector<RegisterValue> m_register_values;
99 lldb::DataBufferSP m_buffer_sp;
102 } // namespace lldb_private
104 #endif // liblldb_ThreadPlanTracer_h_