1 /*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6 #include "DebugEvent.h"
7
8 #include "CpuState.h"
9
10
11 // #pragma mark - DebugEvent
12
13
DebugEvent(int32 eventType,team_id team,thread_id thread)14 DebugEvent::DebugEvent(int32 eventType, team_id team,
15 thread_id thread)
16 :
17 fEventType(eventType),
18 fTeam(team),
19 fThread(thread),
20 fThreadStopped(false)
21 {
22 }
23
24
~DebugEvent()25 DebugEvent::~DebugEvent()
26 {
27 }
28
29
30 void
SetThreadStopped(bool stopped)31 DebugEvent::SetThreadStopped(bool stopped)
32 {
33 fThreadStopped = stopped;
34 }
35
36
37 // #pragma mark - CpuStateEvent
38
39
CpuStateEvent(debug_debugger_message eventType,team_id team,thread_id thread,CpuState * state)40 CpuStateEvent::CpuStateEvent(debug_debugger_message eventType, team_id team,
41 thread_id thread, CpuState* state)
42 :
43 DebugEvent(eventType, team, thread),
44 fCpuState(state)
45 {
46 if (fCpuState != NULL)
47 fCpuState->AcquireReference();
48 }
49
50
~CpuStateEvent()51 CpuStateEvent::~CpuStateEvent()
52 {
53 if (fCpuState != NULL)
54 fCpuState->ReleaseReference();
55 }
56
57
58 // #pragma mark - ThreadDebuggedEvent
59
60
ThreadDebuggedEvent(team_id team,thread_id thread)61 ThreadDebuggedEvent::ThreadDebuggedEvent(team_id team, thread_id thread)
62 :
63 DebugEvent(B_DEBUGGER_MESSAGE_THREAD_DEBUGGED, team, thread)
64 {
65 }
66
67
68 // #pragma mark - DebuggerCallEvent
69
70
DebuggerCallEvent(team_id team,thread_id thread,target_addr_t message)71 DebuggerCallEvent::DebuggerCallEvent(team_id team, thread_id thread,
72 target_addr_t message)
73 :
74 DebugEvent(B_DEBUGGER_MESSAGE_DEBUGGER_CALL, team, thread),
75 fMessage(message)
76 {
77 }
78
79
80 // #pragma mark - BreakpointHitEvent
81
82
BreakpointHitEvent(team_id team,thread_id thread,CpuState * state)83 BreakpointHitEvent::BreakpointHitEvent(team_id team, thread_id thread,
84 CpuState* state)
85 :
86 CpuStateEvent(B_DEBUGGER_MESSAGE_BREAKPOINT_HIT, team, thread, state)
87 {
88 }
89
90
91 // #pragma mark - WatchpointHitEvent
92
93
WatchpointHitEvent(team_id team,thread_id thread,CpuState * state)94 WatchpointHitEvent::WatchpointHitEvent(team_id team, thread_id thread,
95 CpuState* state)
96 :
97 CpuStateEvent(B_DEBUGGER_MESSAGE_WATCHPOINT_HIT, team, thread, state)
98 {
99 }
100
101
102
103 // #pragma mark - SingleStepEvent
104
105
SingleStepEvent(team_id team,thread_id thread,CpuState * state)106 SingleStepEvent::SingleStepEvent(team_id team, thread_id thread,
107 CpuState* state)
108 :
109 CpuStateEvent(B_DEBUGGER_MESSAGE_SINGLE_STEP, team, thread, state)
110 {
111 }
112
113
114 // #pragma mark - ExceptionOccurredEvent
115
116
ExceptionOccurredEvent(team_id team,thread_id thread,debug_exception_type exception)117 ExceptionOccurredEvent::ExceptionOccurredEvent(team_id team, thread_id thread,
118 debug_exception_type exception)
119 :
120 DebugEvent(B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED, team, thread),
121 fException(exception)
122 {
123 }
124
125
126 // #pragma mark - TeamDeletedEvent
127
128
TeamDeletedEvent(team_id team,thread_id thread)129 TeamDeletedEvent::TeamDeletedEvent(team_id team, thread_id thread)
130 :
131 DebugEvent(B_DEBUGGER_MESSAGE_TEAM_DELETED, team, thread)
132 {
133 }
134
135
136 // #pragma mark - TeamExecEvent
137
138
TeamExecEvent(team_id team,thread_id thread)139 TeamExecEvent::TeamExecEvent(team_id team, thread_id thread)
140 :
141 DebugEvent(B_DEBUGGER_MESSAGE_TEAM_EXEC, team, thread)
142 {
143 }
144
145
146 // #pragma mark - ThreadCreatedEvent
147
148
ThreadCreatedEvent(team_id team,thread_id thread,thread_id newThread)149 ThreadCreatedEvent::ThreadCreatedEvent(team_id team, thread_id thread,
150 thread_id newThread)
151 :
152 DebugEvent(B_DEBUGGER_MESSAGE_THREAD_CREATED, team, thread),
153 fNewThread(newThread)
154 {
155 }
156
157
158 // #pragma mark - ThreadRenamedEvent
159
160
ThreadRenamedEvent(team_id team,thread_id thread,thread_id renamedThread,const char * newName)161 ThreadRenamedEvent::ThreadRenamedEvent(team_id team, thread_id thread,
162 thread_id renamedThread, const char* newName)
163 :
164 DebugEvent(DEBUGGER_MESSAGE_THREAD_RENAMED, team, thread),
165 fRenamedThread(renamedThread)
166 {
167 strlcpy(fName, newName, sizeof(fName));
168 }
169
170
171 // #pragma mark - ThreadPriorityChangedEvent
172
173
ThreadPriorityChangedEvent(team_id team,thread_id thread,thread_id changedThread,int32 newPriority)174 ThreadPriorityChangedEvent::ThreadPriorityChangedEvent(team_id team,
175 thread_id thread, thread_id changedThread, int32 newPriority)
176 :
177 DebugEvent(DEBUGGER_MESSAGE_THREAD_PRIORITY_CHANGED, team, thread),
178 fChangedThread(changedThread),
179 fNewPriority(newPriority)
180 {
181 }
182
183
184 // #pragma mark - ThreadDeletedEvent
185
186
ThreadDeletedEvent(team_id team,thread_id thread)187 ThreadDeletedEvent::ThreadDeletedEvent(team_id team, thread_id thread)
188 :
189 DebugEvent(B_DEBUGGER_MESSAGE_THREAD_DELETED, team, thread)
190 {
191 }
192
193
194 // #pragma mark - ImageCreatedEvent
195
196
ImageCreatedEvent(team_id team,thread_id thread,const ImageInfo & info)197 ImageCreatedEvent::ImageCreatedEvent(team_id team, thread_id thread,
198 const ImageInfo& info)
199 :
200 DebugEvent(B_DEBUGGER_MESSAGE_IMAGE_CREATED, team, thread),
201 fInfo(info)
202 {
203 }
204
205
206 // #pragma mark - ImageDeletedEvent
207
208
ImageDeletedEvent(team_id team,thread_id thread,const ImageInfo & info)209 ImageDeletedEvent::ImageDeletedEvent(team_id team, thread_id thread,
210 const ImageInfo& info)
211 :
212 DebugEvent(B_DEBUGGER_MESSAGE_IMAGE_DELETED, team, thread),
213 fInfo(info)
214 {
215 }
216
217
218 // #pragma mark - PostSyscallEvent
219
220
PostSyscallEvent(team_id team,thread_id thread,const SyscallInfo & info)221 PostSyscallEvent::PostSyscallEvent(team_id team, thread_id thread,
222 const SyscallInfo& info)
223 :
224 DebugEvent(B_DEBUGGER_MESSAGE_POST_SYSCALL, team, thread),
225 fInfo(info)
226 {
227 }
228
229
230 // #pragma mark - HandedOverEvent
231
232
HandedOverEvent(team_id team,thread_id thread,thread_id causingThread)233 HandedOverEvent::HandedOverEvent(team_id team, thread_id thread,
234 thread_id causingThread)
235 :
236 DebugEvent(B_DEBUGGER_MESSAGE_HANDED_OVER, team, thread),
237 fCausingThread(causingThread)
238 {
239 }
240
241
242 // #pragma mark - SignalReceivedEvent
243
244
SignalReceivedEvent(team_id team,thread_id thread,const SignalInfo & info)245 SignalReceivedEvent::SignalReceivedEvent(team_id team, thread_id thread,
246 const SignalInfo& info)
247 :
248 DebugEvent(B_DEBUGGER_MESSAGE_SIGNAL_RECEIVED, team, thread),
249 fInfo(info)
250 {
251 }
252