ThreadPlanTracer.h revision 17f5afe9ed10bda3efbce0f26cf0c030331f8b15
1//===-- ThreadPlanTracer.h --------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef liblldb_ThreadPlanTracer_h_ 11#define liblldb_ThreadPlanTracer_h_ 12 13// C Includes 14// C++ Includes 15// Other libraries and framework includes 16// Project includes 17#include "lldb/lldb-private.h" 18#include "lldb/Symbol/TaggedASTType.h" 19#include "lldb/Target/Thread.h" 20 21namespace lldb_private { 22 23class ThreadPlanTracer 24{ 25friend class ThreadPlan; 26 27public: 28 29 typedef enum ThreadPlanTracerStyle 30 { 31 eLocation = 0, 32 eStateChange, 33 eCheckFrames, 34 ePython 35 } ThreadPlanTracerStyle; 36 ThreadPlanTracer (Thread &thread, lldb::StreamSP &stream_sp); 37 ThreadPlanTracer (Thread &thread); 38 39 virtual ~ThreadPlanTracer() 40 { 41 } 42 43 virtual void TracingStarted () 44 { 45 46 } 47 48 virtual void TracingEnded () 49 { 50 51 } 52 53 bool 54 EnableTracing(bool value) 55 { 56 bool old_value = m_enabled; 57 m_enabled = value; 58 if (old_value == false && value == true) 59 TracingStarted(); 60 else if (old_value == true && value == false) 61 TracingEnded(); 62 63 return old_value; 64 } 65 66 bool 67 TracingEnabled() 68 { 69 return m_enabled; 70 } 71 72 bool 73 EnableSingleStep (bool value) 74 { 75 bool old_value = m_single_step; 76 m_single_step = value; 77 return old_value; 78 } 79 80 bool 81 SingleStepEnabled () 82 { 83 return m_single_step; 84 } 85 86protected: 87 Thread &m_thread; 88 89 Stream * 90 GetLogStream (); 91 92 virtual void Log(); 93 94private: 95 bool 96 TracerExplainsStop (); 97 98 bool m_single_step; 99 bool m_enabled; 100 lldb::StreamSP m_stream_sp; 101}; 102 103class ThreadPlanAssemblyTracer : public ThreadPlanTracer 104{ 105public: 106 ThreadPlanAssemblyTracer (Thread &thread, lldb::StreamSP &stream_sp); 107 ThreadPlanAssemblyTracer (Thread &thread); 108 virtual ~ThreadPlanAssemblyTracer (); 109 virtual void TracingStarted (); 110 virtual void TracingEnded (); 111 virtual void Log(); 112private: 113 void InitializeTracer(); 114 115 Process &m_process; 116 Target &m_target; 117 Disassembler *m_disassembler; 118 const ABI *m_abi; 119 TypeFromUser m_intptr_type; 120 std::vector<uint64_t> m_register_values; 121 lldb::DataBufferSP m_buffer_sp; 122}; 123 124} // namespace lldb_private 125 126#endif // liblldb_ThreadPlanTracer_h_ 127