| //===-- ThreadPlanTracer.h --------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef liblldb_ThreadPlanTracer_h_ |
| #define liblldb_ThreadPlanTracer_h_ |
| |
| // C Includes |
| // C++ Includes |
| // Other libraries and framework includes |
| // Project includes |
| #include "lldb/lldb-private.h" |
| #include "lldb/Symbol/TaggedASTType.h" |
| #include "lldb/Target/Thread.h" |
| |
| namespace lldb_private { |
| |
| class ThreadPlanTracer |
| { |
| friend class ThreadPlan; |
| |
| public: |
| |
| typedef enum ThreadPlanTracerStyle |
| { |
| eLocation = 0, |
| eStateChange, |
| eCheckFrames, |
| ePython |
| } ThreadPlanTracerStyle; |
| ThreadPlanTracer (Thread &thread, lldb::StreamSP &stream_sp); |
| ThreadPlanTracer (Thread &thread); |
| |
| virtual ~ThreadPlanTracer() |
| { |
| } |
| |
| virtual void TracingStarted () |
| { |
| |
| } |
| |
| virtual void TracingEnded () |
| { |
| |
| } |
| |
| bool |
| EnableTracing(bool value) |
| { |
| bool old_value = m_enabled; |
| m_enabled = value; |
| if (old_value == false && value == true) |
| TracingStarted(); |
| else if (old_value == true && value == false) |
| TracingEnded(); |
| |
| return old_value; |
| } |
| |
| bool |
| TracingEnabled() |
| { |
| return m_enabled; |
| } |
| |
| bool |
| EnableSingleStep (bool value) |
| { |
| bool old_value = m_single_step; |
| m_single_step = value; |
| return old_value; |
| } |
| |
| bool |
| SingleStepEnabled () |
| { |
| return m_single_step; |
| } |
| |
| protected: |
| Thread &m_thread; |
| |
| Stream * |
| GetLogStream (); |
| |
| virtual void Log(); |
| |
| private: |
| bool |
| TracerExplainsStop (); |
| |
| bool m_single_step; |
| bool m_enabled; |
| lldb::StreamSP m_stream_sp; |
| }; |
| |
| class ThreadPlanAssemblyTracer : public ThreadPlanTracer |
| { |
| public: |
| ThreadPlanAssemblyTracer (Thread &thread, lldb::StreamSP &stream_sp); |
| ThreadPlanAssemblyTracer (Thread &thread); |
| virtual ~ThreadPlanAssemblyTracer (); |
| virtual void TracingStarted (); |
| virtual void TracingEnded (); |
| virtual void Log(); |
| private: |
| void InitializeTracer(); |
| |
| Process &m_process; |
| Target &m_target; |
| Disassembler *m_disassembler; |
| const ABI *m_abi; |
| TypeFromUser m_intptr_type; |
| std::vector<uint64_t> m_register_values; |
| lldb::DataBufferSP m_buffer_sp; |
| }; |
| |
| } // namespace lldb_private |
| |
| #endif // liblldb_ThreadPlanTracer_h_ |