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_
14 #include "lldb/Symbol/TaggedASTType.h"
15 #include "lldb/Target/Thread.h"
16 #include "lldb/Utility/RegisterValue.h"
17 #include "lldb/lldb-private.h"
19 namespace lldb_private {
21 class ThreadPlanTracer {
22 friend class ThreadPlan;
25 typedef enum ThreadPlanTracerStyle {
30 } ThreadPlanTracerStyle;
32 ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
33 ThreadPlanTracer(Thread &thread);
35 virtual ~ThreadPlanTracer() = default;
37 virtual void TracingStarted() {}
39 virtual void TracingEnded() {}
41 bool EnableTracing(bool value) {
42 bool old_value = m_enabled;
44 if (old_value == false && value == true)
46 else if (old_value == true && value == false)
52 bool TracingEnabled() { return m_enabled; }
54 bool EnableSingleStep(bool value) {
55 bool old_value = m_single_step;
56 m_single_step = value;
60 bool SingleStepEnabled() { return m_single_step; }
65 Stream *GetLogStream();
70 bool TracerExplainsStop();
74 lldb::StreamSP m_stream_sp;
77 class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
79 ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
80 ThreadPlanAssemblyTracer(Thread &thread);
81 ~ThreadPlanAssemblyTracer() override;
83 void TracingStarted() override;
84 void TracingEnded() override;
88 Disassembler *GetDisassembler();
90 TypeFromUser GetIntPointerType();
92 lldb::DisassemblerSP m_disassembler_sp;
93 TypeFromUser m_intptr_type;
94 std::vector<RegisterValue> m_register_values;
95 lldb::DataBufferSP m_buffer_sp;
98 } // namespace lldb_private
100 #endif // liblldb_ThreadPlanTracer_h_