Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:42:56

0001 //===-- ThreadPlanTracer.h --------------------------------------------*- C++
0002 //-*-===//
0003 //
0004 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0005 // See https://llvm.org/LICENSE.txt for license information.
0006 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
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 } // namespace lldb_private
0093 
0094 #endif // LLDB_TARGET_THREADPLANTRACER_H