ThreadPlanTracer.h revision ae7862a7fa70080e7450174b05544e7673fefb9d
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