1 //===-- ThreadPlanTracer.h --------------------------------------------*- C++ 2 //-*-===// 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is distributed under the University of Illinois Open Source 7 // License. See LICENSE.TXT for details. 8 // 9 //===----------------------------------------------------------------------===// 10 11 #ifndef liblldb_ThreadPlanTracer_h_ 12 #define liblldb_ThreadPlanTracer_h_ 13 14 #include "lldb/Symbol/TaggedASTType.h" 15 #include "lldb/Target/Thread.h" 16 #include "lldb/Utility/RegisterValue.h" 17 #include "lldb/lldb-private.h" 18 19 namespace lldb_private { 20 21 class ThreadPlanTracer { 22 friend class ThreadPlan; 23 24 public: 25 typedef enum ThreadPlanTracerStyle { 26 eLocation = 0, 27 eStateChange, 28 eCheckFrames, 29 ePython 30 } ThreadPlanTracerStyle; 31 32 ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp); 33 ThreadPlanTracer(Thread &thread); 34 35 virtual ~ThreadPlanTracer() = default; 36 TracingStarted()37 virtual void TracingStarted() {} 38 TracingEnded()39 virtual void TracingEnded() {} 40 EnableTracing(bool value)41 bool EnableTracing(bool value) { 42 bool old_value = m_enabled; 43 m_enabled = value; 44 if (old_value == false && value == true) 45 TracingStarted(); 46 else if (old_value == true && value == false) 47 TracingEnded(); 48 49 return old_value; 50 } 51 TracingEnabled()52 bool TracingEnabled() { return m_enabled; } 53 EnableSingleStep(bool value)54 bool EnableSingleStep(bool value) { 55 bool old_value = m_single_step; 56 m_single_step = value; 57 return old_value; 58 } 59 SingleStepEnabled()60 bool SingleStepEnabled() { return m_single_step; } 61 62 protected: 63 Thread &m_thread; 64 65 Stream *GetLogStream(); 66 67 virtual void Log(); 68 69 private: 70 bool TracerExplainsStop(); 71 72 bool m_single_step; 73 bool m_enabled; 74 lldb::StreamSP m_stream_sp; 75 }; 76 77 class ThreadPlanAssemblyTracer : public ThreadPlanTracer { 78 public: 79 ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp); 80 ThreadPlanAssemblyTracer(Thread &thread); 81 ~ThreadPlanAssemblyTracer() override; 82 83 void TracingStarted() override; 84 void TracingEnded() override; 85 void Log() override; 86 87 private: 88 Disassembler *GetDisassembler(); 89 90 TypeFromUser GetIntPointerType(); 91 92 lldb::DisassemblerSP m_disassembler_sp; 93 TypeFromUser m_intptr_type; 94 std::vector<RegisterValue> m_register_values; 95 lldb::DataBufferSP m_buffer_sp; 96 }; 97 98 } // namespace lldb_private 99 100 #endif // liblldb_ThreadPlanTracer_h_ 101