LLDB mainline
ThreadList.h
Go to the documentation of this file.
1//===-- ThreadList.h --------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_TARGET_THREADLIST_H
10#define LLDB_TARGET_THREADLIST_H
11
12#include <mutex>
13#include <vector>
14
15#include "lldb/Target/Thread.h"
18#include "lldb/Utility/UserID.h"
19#include "lldb/lldb-private.h"
20
21namespace lldb_private {
22
23// This is a thread list with lots of functionality for use only by the process
24// for which this is the thread list. A generic container class with iterator
25// functionality is ThreadCollection.
27 friend class Process;
28
29public:
30 ThreadList(Process *process);
31
32 ThreadList(const ThreadList &rhs);
33
34 ~ThreadList() override;
35
36 const ThreadList &operator=(const ThreadList &rhs);
37
38 uint32_t GetSize(bool can_update = true);
39
40 // Return the selected thread if there is one. Otherwise, return the thread
41 // selected at index 0.
43
44 // Manage the thread to use for running expressions. This is usually the
45 // Selected thread, but sometimes (e.g. when evaluating breakpoint conditions
46 // & stop hooks) it isn't.
48 public:
50 : m_thread_list(&thread_list), m_tid(tid) {
52 }
53
55
59 }
60
61 private:
64 };
65
67
68protected:
70
72
73public:
74 bool SetSelectedThreadByID(lldb::tid_t tid, bool notify = false);
75
76 bool SetSelectedThreadByIndexID(uint32_t index_id, bool notify = false);
77
78 void Clear();
79
80 void Flush();
81
82 void Destroy();
83
84 // Note that "idx" is not the same as the "thread_index". It is a zero based
85 // index to accessing the current threads, whereas "thread_index" is a unique
86 // index assigned
87 lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update = true);
88
89 lldb::ThreadSP FindThreadByID(lldb::tid_t tid, bool can_update = true);
90
92 bool can_update = true);
93
94 lldb::ThreadSP RemoveThreadByID(lldb::tid_t tid, bool can_update = true);
95
97 bool can_update = true);
98
99 lldb::ThreadSP FindThreadByIndexID(uint32_t index_id, bool can_update = true);
100
102
104
105 bool ShouldStop(Event *event_ptr);
106
107 Vote ShouldReportStop(Event *event_ptr);
108
109 Vote ShouldReportRun(Event *event_ptr);
110
112
113 /// The thread list asks tells all the threads it is about to resume.
114 /// If a thread can "resume" without having to resume the target, it
115 /// will return false for WillResume, and then the process will not be
116 /// restarted.
117 ///
118 /// \return
119 /// \b true instructs the process to resume normally,
120 /// \b false means start & stopped events will be generated, but
121 /// the process will not actually run. The thread must then return
122 /// the correct StopInfo when asked.
123 ///
124 bool WillResume();
125
126 void DidResume();
127
128 void DidStop();
129
130 void DiscardThreadPlans();
131
132 uint32_t GetStopID() const;
133
134 void SetStopID(uint32_t stop_id);
135
136 std::recursive_mutex &GetMutex() const override;
137
138 void Update(ThreadList &rhs);
139
140protected:
141 void SetShouldReportStop(Vote vote);
142
144
145 // Classes that inherit from Process can see and modify these
146 Process *m_process; ///< The process that manages this thread list.
147 uint32_t
148 m_stop_id; ///< The process stop ID that this thread list is valid for.
150 m_selected_tid; ///< For targets that need the notion of a current thread.
151 std::vector<lldb::tid_t> m_expression_tid_stack;
152
153private:
154 ThreadList() = delete;
155};
156
157} // namespace lldb_private
158
159#endif // LLDB_TARGET_THREADLIST_H
A plug-in interface definition class for debugging a process.
Definition: Process.h:341
ExpressionExecutionThreadPusher(ThreadList &thread_list, lldb::tid_t tid)
Definition: ThreadList.h:49
lldb::ThreadSP RemoveThreadByID(lldb::tid_t tid, bool can_update=true)
Definition: ThreadList.cpp:139
lldb::ThreadSP GetSelectedThread()
Definition: ThreadList.cpp:684
bool ShouldStop(Event *event_ptr)
Definition: ThreadList.cpp:226
Vote ShouldReportStop(Event *event_ptr)
Definition: ThreadList.cpp:376
uint32_t GetStopID() const
Definition: ThreadList.cpp:79
bool SetSelectedThreadByIndexID(uint32_t index_id, bool notify=false)
Definition: ThreadList.cpp:711
lldb::ThreadSP FindThreadByProtocolID(lldb::tid_t tid, bool can_update=true)
Definition: ThreadList.cpp:121
void PopExpressionExecutionThread(lldb::tid_t tid)
Definition: ThreadList.cpp:74
bool SetSelectedThreadByID(lldb::tid_t tid, bool notify=false)
Definition: ThreadList.cpp:696
lldb::ThreadSP FindThreadByIndexID(uint32_t index_id, bool can_update=true)
Definition: ThreadList.cpp:209
Vote ShouldReportRun(Event *event_ptr)
Definition: ThreadList.cpp:436
void SetStopID(uint32_t stop_id)
Definition: ThreadList.cpp:81
lldb::ThreadSP GetThreadSPForThreadPtr(Thread *thread_ptr)
Definition: ThreadList.cpp:178
lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update=true)
Definition: ThreadList.cpp:91
uint32_t m_stop_id
The process stop ID that this thread list is valid for.
Definition: ThreadList.h:148
std::recursive_mutex & GetMutex() const override
Definition: ThreadList.cpp:786
lldb::ThreadSP FindThreadByID(lldb::tid_t tid, bool can_update=true)
Definition: ThreadList.cpp:103
lldb::ThreadSP GetExpressionExecutionThread()
Definition: ThreadList.cpp:60
const ThreadList & operator=(const ThreadList &rhs)
Definition: ThreadList.cpp:37
void Update(ThreadList &rhs)
Definition: ThreadList.cpp:737
lldb::ThreadSP GetBackingThread(const lldb::ThreadSP &real_thread)
Definition: ThreadList.cpp:195
Process * m_process
The process that manages this thread list.
Definition: ThreadList.h:146
bool WillResume()
The thread list asks tells all the threads it is about to resume.
Definition: ThreadList.cpp:512
void PushExpressionExecutionThread(lldb::tid_t tid)
Definition: ThreadList.cpp:70
void SetShouldReportStop(Vote vote)
Definition: ThreadList.cpp:425
lldb::tid_t m_selected_tid
For targets that need the notion of a current thread.
Definition: ThreadList.h:150
void NotifySelectedThreadChanged(lldb::tid_t tid)
Definition: ThreadList.cpp:726
lldb::ThreadSP RemoveThreadByProtocolID(lldb::tid_t tid, bool can_update=true)
Definition: ThreadList.cpp:158
std::vector< lldb::tid_t > m_expression_tid_stack
Definition: ThreadList.h:151
#define LLDB_INVALID_THREAD_ID
Definition: lldb-defines.h:90
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
std::shared_ptr< lldb_private::Thread > ThreadSP
Definition: lldb-forward.h:438
uint64_t tid_t
Definition: lldb-types.h:82