File indexing completed on 2026-05-10 08:42:56
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef LLDB_TARGET_THREADPLANTRACER_H
0011 #define LLDB_TARGET_THREADPLANTRACER_H
0012
0013 #include "lldb/Symbol/TaggedASTType.h"
0014 #include "lldb/Target/Thread.h"
0015 #include "lldb/Utility/RegisterValue.h"
0016 #include "lldb/lldb-private.h"
0017
0018 namespace lldb_private {
0019
0020 class ThreadPlanTracer {
0021 friend class ThreadPlan;
0022
0023 public:
0024 enum ThreadPlanTracerStyle {
0025 eLocation = 0,
0026 eStateChange,
0027 eCheckFrames,
0028 ePython
0029 };
0030
0031 ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
0032 ThreadPlanTracer(Thread &thread);
0033
0034 virtual ~ThreadPlanTracer() = default;
0035
0036 virtual void TracingStarted() {}
0037
0038 virtual void TracingEnded() {}
0039
0040 bool EnableTracing(bool value) {
0041 bool old_value = m_enabled;
0042 m_enabled = value;
0043 if (old_value == false && value == true)
0044 TracingStarted();
0045 else if (old_value == true && value == false)
0046 TracingEnded();
0047
0048 return old_value;
0049 }
0050
0051 bool TracingEnabled() { return m_enabled; }
0052
0053 Thread &GetThread();
0054
0055 protected:
0056 Process &m_process;
0057 lldb::tid_t m_tid;
0058
0059 Stream *GetLogStream();
0060
0061 virtual void Log();
0062
0063 private:
0064 bool TracerExplainsStop();
0065
0066 bool m_enabled;
0067 lldb::StreamSP m_stream_sp;
0068 Thread *m_thread;
0069 };
0070
0071 class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
0072 public:
0073 ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
0074 ThreadPlanAssemblyTracer(Thread &thread);
0075 ~ThreadPlanAssemblyTracer() override;
0076
0077 void TracingStarted() override;
0078 void TracingEnded() override;
0079 void Log() override;
0080
0081 private:
0082 Disassembler *GetDisassembler();
0083
0084 TypeFromUser GetIntPointerType();
0085
0086 lldb::DisassemblerSP m_disassembler_sp;
0087 TypeFromUser m_intptr_type;
0088 std::vector<RegisterValue> m_register_values;
0089 lldb::DataBufferSP m_buffer_sp;
0090 };
0091
0092 }
0093
0094 #endif