LLDB mainline
BreakpointLocation.cpp
Go to the documentation of this file.
1//===-- BreakpointLocation.cpp --------------------------------------------===//
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
12#include "lldb/Core/Debugger.h"
13#include "lldb/Core/Module.h"
19#include "lldb/Symbol/Symbol.h"
21#include "lldb/Target/Process.h"
22#include "lldb/Target/Target.h"
23#include "lldb/Target/Thread.h"
26#include "lldb/Utility/Log.h"
28
29using namespace lldb;
30using namespace lldb_private;
31
33 const Address &addr, lldb::tid_t tid,
34 bool hardware, bool check_for_resolver)
35 : m_being_created(true), m_should_resolve_indirect_functions(false),
36 m_is_reexported(false), m_is_indirect(false), m_address(addr),
37 m_owner(owner), m_condition_hash(0), m_loc_id(loc_id), m_hit_counter() {
38 if (check_for_resolver) {
39 Symbol *symbol = m_address.CalculateSymbolContextSymbol();
40 if (symbol && symbol->IsIndirect()) {
41 SetShouldResolveIndirectFunctions(true);
42 }
43 }
44
45 SetThreadID(tid);
46 m_being_created = false;
47}
48
50
53}
54
57 if (m_options_up && m_options_up->IsOptionSet(kind))
58 return *m_options_up;
59 else
60 return m_owner.GetOptions();
61}
62
64
66
68
70 if (!m_owner.IsEnabled())
71 return false;
72 else if (m_options_up != nullptr)
73 return m_options_up->IsEnabled();
74 else
75 return true;
76}
77
80 if (enabled) {
82 } else {
84 }
85 SendBreakpointLocationChangedEvent(enabled ? eBreakpointEventTypeEnabled
86 : eBreakpointEventTypeDisabled);
87}
88
90 if (m_options_up &&
92 return m_options_up->IsAutoContinue();
93 else
94 return m_owner.IsAutoContinue();
95}
96
97void BreakpointLocation::SetAutoContinue(bool auto_continue) {
98 GetLocationOptions().SetAutoContinue(auto_continue);
99 SendBreakpointLocationChangedEvent(eBreakpointEventTypeAutoContinueChanged);
100}
101
103 if (thread_id != LLDB_INVALID_THREAD_ID)
104 GetLocationOptions().SetThreadID(thread_id);
105 else {
106 // If we're resetting this to an invalid thread id, then don't make an
107 // options pointer just to do that.
108 if (m_options_up != nullptr)
109 m_options_up->SetThreadID(thread_id);
110 }
111 SendBreakpointLocationChangedEvent(eBreakpointEventTypeThreadChanged);
112}
113
115 const ThreadSpec *thread_spec =
118 if (thread_spec)
119 return thread_spec->GetTID();
120 else
122}
123
125 if (index != 0)
127 else {
128 // If we're resetting this to an invalid thread id, then don't make an
129 // options pointer just to do that.
130 if (m_options_up != nullptr)
131 m_options_up->GetThreadSpec()->SetIndex(index);
132 }
133 SendBreakpointLocationChangedEvent(eBreakpointEventTypeThreadChanged);
134}
135
137 const ThreadSpec *thread_spec =
140 if (thread_spec)
141 return thread_spec->GetIndex();
142 else
143 return 0;
144}
145
146void BreakpointLocation::SetThreadName(const char *thread_name) {
147 if (thread_name != nullptr)
148 GetLocationOptions().GetThreadSpec()->SetName(thread_name);
149 else {
150 // If we're resetting this to an invalid thread id, then don't make an
151 // options pointer just to do that.
152 if (m_options_up != nullptr)
153 m_options_up->GetThreadSpec()->SetName(thread_name);
154 }
155 SendBreakpointLocationChangedEvent(eBreakpointEventTypeThreadChanged);
156}
157
159 const ThreadSpec *thread_spec =
162 if (thread_spec)
163 return thread_spec->GetName();
164 else
165 return nullptr;
166}
167
168void BreakpointLocation::SetQueueName(const char *queue_name) {
169 if (queue_name != nullptr)
171 else {
172 // If we're resetting this to an invalid thread id, then don't make an
173 // options pointer just to do that.
174 if (m_options_up != nullptr)
175 m_options_up->GetThreadSpec()->SetQueueName(queue_name);
176 }
177 SendBreakpointLocationChangedEvent(eBreakpointEventTypeThreadChanged);
178}
179
181 const ThreadSpec *thread_spec =
184 if (thread_spec)
185 return thread_spec->GetQueueName();
186 else
187 return nullptr;
188}
189
191 if (m_options_up != nullptr && m_options_up->HasCallback())
192 return m_options_up->InvokeCallback(context, m_owner.GetID(), GetID());
193 else
194 return m_owner.InvokeCallback(context, GetID());
195}
196
198 if (m_options_up != nullptr && m_options_up->HasCallback())
199 return m_options_up->IsCallbackSynchronous();
200 else
202}
203
205 void *baton, bool is_synchronous) {
206 // The default "Baton" class will keep a copy of "baton" and won't free or
207 // delete it when it goes out of scope.
209 callback, std::make_shared<UntypedBaton>(baton), is_synchronous);
210 SendBreakpointLocationChangedEvent(eBreakpointEventTypeCommandChanged);
211}
212
214 const BatonSP &baton_sp,
215 bool is_synchronous) {
216 GetLocationOptions().SetCallback(callback, baton_sp, is_synchronous);
217 SendBreakpointLocationChangedEvent(eBreakpointEventTypeCommandChanged);
218}
219
222}
223
224void BreakpointLocation::SetCondition(const char *condition) {
225 GetLocationOptions().SetCondition(condition);
226 SendBreakpointLocationChangedEvent(eBreakpointEventTypeConditionChanged);
227}
228
229const char *BreakpointLocation::GetConditionText(size_t *hash) const {
231 .GetConditionText(hash);
232}
233
235 Status &error) {
237
238 std::lock_guard<std::mutex> guard(m_condition_mutex);
239
240 size_t condition_hash;
241 const char *condition_text = GetConditionText(&condition_hash);
242
243 if (!condition_text) {
244 m_user_expression_sp.reset();
245 return false;
246 }
247
248 error.Clear();
249
250 DiagnosticManager diagnostics;
251
252 if (condition_hash != m_condition_hash || !m_user_expression_sp ||
253 !m_user_expression_sp->MatchesContext(exe_ctx)) {
255 // See if we can figure out the language from the frame, otherwise use the
256 // default language:
258 if (comp_unit)
259 language = comp_unit->GetLanguage();
260
261 m_user_expression_sp.reset(GetTarget().GetUserExpressionForLanguage(
262 condition_text, llvm::StringRef(), language, Expression::eResultTypeAny,
263 EvaluateExpressionOptions(), nullptr, error));
264 if (error.Fail()) {
265 LLDB_LOGF(log, "Error getting condition expression: %s.",
266 error.AsCString());
267 m_user_expression_sp.reset();
268 return true;
269 }
270
271 if (!m_user_expression_sp->Parse(diagnostics, exe_ctx,
273 false)) {
274 error.SetErrorStringWithFormat(
275 "Couldn't parse conditional expression:\n%s",
276 diagnostics.GetString().c_str());
277 m_user_expression_sp.reset();
278 return true;
279 }
280
281 m_condition_hash = condition_hash;
282 }
283
284 // We need to make sure the user sees any parse errors in their condition, so
285 // we'll hook the constructor errors up to the debugger's Async I/O.
286
287 ValueObjectSP result_value_sp;
288
290 options.SetUnwindOnError(true);
291 options.SetIgnoreBreakpoints(true);
292 options.SetTryAllThreads(true);
294 true); // Don't generate a user variable for condition expressions.
295
296 Status expr_error;
297
298 diagnostics.Clear();
299
300 ExpressionVariableSP result_variable_sp;
301
302 ExpressionResults result_code = m_user_expression_sp->Execute(
303 diagnostics, exe_ctx, options, m_user_expression_sp, result_variable_sp);
304
305 bool ret;
306
307 if (result_code == eExpressionCompleted) {
308 if (!result_variable_sp) {
309 error.SetErrorString("Expression did not return a result");
310 return false;
311 }
312
313 result_value_sp = result_variable_sp->GetValueObject();
314
315 if (result_value_sp) {
316 ret = result_value_sp->IsLogicalTrue(error);
317 if (log) {
318 if (error.Success()) {
319 LLDB_LOGF(log, "Condition successfully evaluated, result is %s.\n",
320 ret ? "true" : "false");
321 } else {
322 error.SetErrorString(
323 "Failed to get an integer result from the expression");
324 ret = false;
325 }
326 }
327 } else {
328 ret = false;
329 error.SetErrorString("Failed to get any result from the expression");
330 }
331 } else {
332 ret = false;
333 error.SetErrorStringWithFormat("Couldn't execute expression:\n%s",
334 diagnostics.GetString().c_str());
335 }
336
337 return ret;
338}
339
343}
344
347 SendBreakpointLocationChangedEvent(eBreakpointEventTypeIgnoreChanged);
348}
349
351 if (m_options_up != nullptr) {
352 uint32_t loc_ignore = m_options_up->GetIgnoreCount();
353 if (loc_ignore != 0)
354 m_options_up->SetIgnoreCount(loc_ignore - 1);
355 }
356}
357
359 uint32_t owner_ignore = GetBreakpoint().GetIgnoreCount();
360 uint32_t loc_ignore = 0;
361 if (m_options_up != nullptr)
362 loc_ignore = m_options_up->GetIgnoreCount();
363
364 if (loc_ignore != 0 || owner_ignore != 0) {
366 DecrementIgnoreCount(); // Have to decrement our owners' ignore count,
367 // since it won't get a chance to.
368 return false;
369 }
370 return true;
371}
372
374 // If we make the copy we don't copy the callbacks because that is
375 // potentially expensive and we don't want to do that for the simple case
376 // where someone is just disabling the location.
377 if (m_options_up == nullptr)
378 m_options_up = std::make_unique<BreakpointOptions>(false);
379
380 return *m_options_up;
381}
382
384 return thread.MatchesSpec(
386 .GetThreadSpecNoCreate());
387}
388
389// RETURNS - true if we should stop at this breakpoint, false if we
390// should continue. Note, we don't check the thread spec for the breakpoint
391// here, since if the breakpoint is not for this thread, then the event won't
392// even get reported, so the check is redundant.
393
395 bool should_stop = true;
397
398 // Do this first, if a location is disabled, it shouldn't increment its hit
399 // count.
400 if (!IsEnabled())
401 return false;
402
403 // We only run synchronous callbacks in ShouldStop:
404 context->is_synchronous = true;
405 should_stop = InvokeCallback(context);
406
407 if (log) {
408 StreamString s;
410 LLDB_LOGF(log, "Hit breakpoint location: %s, %s.\n", s.GetData(),
411 should_stop ? "stopping" : "continuing");
412 }
413
414 return should_stop;
415}
416
418 if (IsEnabled()) {
419 // Step our hit count, and also step the hit count of the owner.
422 }
423}
424
426 if (IsEnabled()) {
427 // Step our hit count, and also step the hit count of the owner.
430 }
431}
432
434 return m_bp_site_sp.get() != nullptr;
435}
436
438 return m_bp_site_sp;
439}
440
442 if (m_bp_site_sp)
443 return true;
444
445 Process *process = m_owner.GetTarget().GetProcessSP().get();
446 if (process == nullptr)
447 return false;
448
449 lldb::break_id_t new_id =
450 process->CreateBreakpointSite(shared_from_this(), m_owner.IsHardware());
451
452 if (new_id == LLDB_INVALID_BREAK_ID) {
454 if (log)
455 log->Warning("Failed to add breakpoint site at 0x%" PRIx64,
457 }
458
459 return IsResolved();
460}
461
463 m_bp_site_sp = bp_site_sp;
464 SendBreakpointLocationChangedEvent(eBreakpointEventTypeLocationsResolved);
465 return true;
466}
467
469 if (m_bp_site_sp.get()) {
470 ProcessSP process_sp(m_owner.GetTarget().GetProcessSP());
471 // If the process exists, get it to remove the owner, it will remove the
472 // physical implementation of the breakpoint as well if there are no more
473 // owners. Otherwise just remove this owner.
474 if (process_sp)
475 process_sp->RemoveOwnerFromBreakpointSite(GetBreakpoint().GetID(),
477 else
478 m_bp_site_sp->RemoveOwner(GetBreakpoint().GetID(), GetID());
479
480 m_bp_site_sp.reset();
481 return true;
482 }
483 return false;
484}
485
488 SymbolContext sc;
489
490 // If the description level is "initial" then the breakpoint is printing out
491 // our initial state, and we should let it decide how it wants to print our
492 // label.
493 if (level != eDescriptionLevelInitial) {
494 s->Indent();
496 }
497
498 if (level == lldb::eDescriptionLevelBrief)
499 return;
500
501 if (level != eDescriptionLevelInitial)
502 s->PutCString(": ");
503
505 s->IndentMore();
506
509
510 if (level == lldb::eDescriptionLevelFull ||
511 level == eDescriptionLevelInitial) {
512 if (IsReExported())
513 s->PutCString("re-exported target = ");
514 else
515 s->PutCString("where = ");
517 false, true, false, true, true);
518 } else {
519 if (sc.module_sp) {
520 s->EOL();
521 s->Indent("module = ");
522 sc.module_sp->GetFileSpec().Dump(s->AsRawOstream());
523 }
524
525 if (sc.comp_unit != nullptr) {
526 s->EOL();
527 s->Indent("compile unit = ");
529
530 if (sc.function != nullptr) {
531 s->EOL();
532 s->Indent("function = ");
533 s->PutCString(sc.function->GetName().AsCString("<unknown>"));
534 }
535
536 if (sc.line_entry.line > 0) {
537 s->EOL();
538 s->Indent("location = ");
539 sc.line_entry.DumpStopContext(s, true);
540 }
541
542 } else {
543 // If we don't have a comp unit, see if we have a symbol we can print.
544 if (sc.symbol) {
545 s->EOL();
546 if (IsReExported())
547 s->Indent("re-exported target = ");
548 else
549 s->Indent("symbol = ");
550 s->PutCString(sc.symbol->GetName().AsCString("<unknown>"));
551 }
552 }
553 }
554 }
555
556 if (level == lldb::eDescriptionLevelVerbose) {
557 s->EOL();
558 s->Indent();
559 }
560
562 (level == eDescriptionLevelFull || level == eDescriptionLevelInitial))
563 s->Printf(", ");
564 s->Printf("address = ");
565
566 ExecutionContextScope *exe_scope = nullptr;
567 Target *target = &m_owner.GetTarget();
568 if (target)
569 exe_scope = target->GetProcessSP().get();
570 if (exe_scope == nullptr)
571 exe_scope = target;
572
573 if (level == eDescriptionLevelInitial)
576 else
579
580 if (IsIndirect() && m_bp_site_sp) {
581 Address resolved_address;
582 resolved_address.SetLoadAddress(m_bp_site_sp->GetLoadAddress(), target);
583 Symbol *resolved_symbol = resolved_address.CalculateSymbolContextSymbol();
584 if (resolved_symbol) {
585 if (level == eDescriptionLevelFull || level == eDescriptionLevelInitial)
586 s->Printf(", ");
587 else if (level == lldb::eDescriptionLevelVerbose) {
588 s->EOL();
589 s->Indent();
590 }
591 s->Printf("indirect target = %s",
592 resolved_symbol->GetName().GetCString());
593 }
594 }
595
596 bool is_resolved = IsResolved();
597 bool is_hardware = is_resolved && m_bp_site_sp->IsHardware();
598
599 if (level == lldb::eDescriptionLevelVerbose) {
600 s->EOL();
601 s->Indent();
602 s->Printf("resolved = %s\n", is_resolved ? "true" : "false");
603 s->Indent();
604 s->Printf("hardware = %s\n", is_hardware ? "true" : "false");
605 s->Indent();
606 s->Printf("hit count = %-4u\n", GetHitCount());
607
608 if (m_options_up) {
609 s->Indent();
610 m_options_up->GetDescription(s, level);
611 s->EOL();
612 }
613 s->IndentLess();
614 } else if (level != eDescriptionLevelInitial) {
615 s->Printf(", %sresolved, %shit count = %u ", (is_resolved ? "" : "un"),
616 (is_hardware ? "hardware, " : ""), GetHitCount());
617 if (m_options_up) {
618 m_options_up->GetDescription(s, level);
619 }
620 }
621}
622
624 if (s == nullptr)
625 return;
626
627 bool is_resolved = IsResolved();
628 bool is_hardware = is_resolved && m_bp_site_sp->IsHardware();
629 auto hardware_index = is_resolved ?
630 m_bp_site_sp->GetHardwareIndex() : LLDB_INVALID_INDEX32;
631
634 ->GetTID();
635 s->Printf("BreakpointLocation %u: tid = %4.4" PRIx64
636 " load addr = 0x%8.8" PRIx64 " state = %s type = %s breakpoint "
637 "hw_index = %i hit_count = %-4u ignore_count = %-4u",
638 GetID(), tid,
640 (m_options_up ? m_options_up->IsEnabled() : m_owner.IsEnabled())
641 ? "enabled "
642 : "disabled",
643 is_hardware ? "hardware" : "software", hardware_index,
644 GetHitCount(),
646 .GetIgnoreCount());
647}
648
650 lldb::BreakpointEventType eventKind) {
655 eventKind, m_owner.shared_from_this());
656 data->GetBreakpointLocationCollection().Add(shared_from_this());
658 data);
659 }
660}
661
663 m_address = swap_from->m_address;
665 swap_from->m_should_resolve_indirect_functions;
666 m_is_reexported = swap_from->m_is_reexported;
667 m_is_indirect = swap_from->m_is_indirect;
668 m_user_expression_sp.reset();
669}
static llvm::raw_ostream & error(Stream &strm)
#define LLDB_LOGF(log,...)
Definition: Log.h:349
A section + offset based address class.
Definition: Address.h:59
bool SetLoadAddress(lldb::addr_t load_addr, Target *target, bool allow_section_end=false)
Set the address to represent load_addr.
Definition: Address.cpp:1040
uint32_t CalculateSymbolContext(SymbolContext *sc, lldb::SymbolContextItem resolve_scope=lldb::eSymbolContextEverything) const
Reconstruct a symbol context from an address.
Definition: Address.cpp:825
lldb::addr_t GetOpcodeLoadAddress(Target *target, AddressClass addr_class=AddressClass::eInvalid) const
Get the load address as an opcode load address.
Definition: Address.cpp:368
@ DumpStyleFileAddress
Display as the file address (if any).
Definition: Address.h:84
@ DumpStyleModuleWithFileAddress
Display as the file address with the module name prepended (if any).
Definition: Address.h:90
@ DumpStyleLoadAddress
Display as the load address (if resolved).
Definition: Address.h:96
bool Dump(Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, DumpStyle fallback_style=DumpStyleInvalid, uint32_t addr_byte_size=UINT32_MAX, bool all_ranges=false) const
Dump a description of this object to a Stream.
Definition: Address.cpp:406
bool IsSectionOffset() const
Check if an address is section offset.
Definition: Address.h:332
CompileUnit * CalculateSymbolContextCompileUnit() const
Definition: Address.cpp:851
Symbol * CalculateSymbolContextSymbol() const
Definition: Address.cpp:893
static void GetCanonicalReference(Stream *s, lldb::break_id_t break_id, lldb::break_id_t break_loc_id)
Takes a breakpoint ID and the breakpoint location id and returns a string containing the canonical de...
void Add(const lldb::BreakpointLocationSP &bp_loc_sp)
Add the breakpoint bp_loc_sp to the list.
size_t m_condition_hash
For testing whether the condition source code changed.
void SwapLocation(lldb::BreakpointLocationSP swap_from)
bool IsIndirect()
Returns whether the address set in the breakpoint site for this location was found by resolving an in...
void SetCondition(const char *condition)
Set the breakpoint location's condition.
uint32_t GetHitCount() const
Return the current Hit Count.
std::mutex m_condition_mutex
Guards parsing and evaluation of the condition, which could be evaluated by multiple processes.
StoppointHitCounter m_hit_counter
Number of times this breakpoint location has been hit.
lldb::BreakpointSiteSP m_bp_site_sp
Our breakpoint site (it may be shared by more than one location.)
Breakpoint & m_owner
The breakpoint that produced this object.
bool SetBreakpointSite(lldb::BreakpointSiteSP &bp_site_sp)
Set the breakpoint site for this location to bp_site_sp.
void SetIgnoreCount(uint32_t n)
Set the breakpoint to ignore the next count breakpoint hits.
void SetQueueName(const char *queue_name)
bool IsReExported()
Returns whether the address set in the breakpoint location was re-routed to the target of a re-export...
lldb::addr_t GetLoadAddress() const
Gets the load address for this breakpoint location.
BreakpointOptions & GetLocationOptions()
Use this to set location specific breakpoint options.
bool InvokeCallback(StoppointCallbackContext *context)
Invoke the callback action when the breakpoint is hit.
bool ShouldStop(StoppointCallbackContext *context)
Determines whether we should stop due to a hit at this breakpoint location.
void GetDescription(Stream *s, lldb::DescriptionLevel level)
Print a description of this breakpoint location to the stream s.
Address m_address
The address defining this location.
bool IsEnabled() const
Check the Enable/Disable state.
bool IgnoreCountShouldStop()
BreakpointLocation::IgnoreCountShouldStop can only be called once per stop.
bool ResolveBreakpointSite()
Try to resolve the breakpoint site for this location.
bool IsResolved() const
Return whether this breakpoint location has a breakpoint site.
lldb::break_id_t GetID() const
Returns the breakpoint location ID.
const char * GetConditionText(size_t *hash=nullptr) const
Return a pointer to the text of the condition expression.
void SetEnabled(bool enabled)
If enabled is true, enable the breakpoint, if false disable it.
void Dump(Stream *s) const
Standard "Dump" method. At present it does nothing.
bool IsCallbackSynchronous()
Report whether the callback for this location is synchronous or not.
bool ClearBreakpointSite()
Clear this breakpoint location's breakpoint site - for instance when disabling the breakpoint.
BreakpointLocation(lldb::break_id_t bid, Breakpoint &owner, const Address &addr, lldb::tid_t tid, bool hardware, bool check_for_resolver=true)
Constructor.
void SendBreakpointLocationChangedEvent(lldb::BreakpointEventType eventKind)
void SetAutoContinue(bool auto_continue)
If auto_continue is true, set the breakpoint to continue when hit.
void SetThreadID(lldb::tid_t thread_id)
Set the valid thread to be checked when the breakpoint is hit.
lldb::UserExpressionSP m_user_expression_sp
The compiled expression to use in testing our condition.
void SetCallback(BreakpointHitCallback callback, const lldb::BatonSP &callback_baton_sp, bool is_synchronous)
Set the callback action invoked when the breakpoint is hit.
uint32_t GetIgnoreCount() const
Return the current Ignore Count.
bool ConditionSaysStop(ExecutionContext &exe_ctx, Status &error)
std::unique_ptr< BreakpointOptions > m_options_up
Breakpoint options pointer, nullptr if we're using our breakpoint's options.
Address & GetAddress()
Gets the Address for this breakpoint location.
bool IsAutoContinue() const
Check the AutoContinue state.
void SetThreadName(const char *thread_name)
Breakpoint & GetBreakpoint()
Gets the Breakpoint that created this breakpoint location.
const BreakpointOptions & GetOptionsSpecifyingKind(BreakpointOptions::OptionKind kind) const
Use this to access breakpoint options from this breakpoint location.
lldb::BreakpointSiteSP GetBreakpointSite() const
"lldb/Breakpoint/BreakpointOptions.h" Class that manages the options on a breakpoint or breakpoint lo...
bool IsCallbackSynchronous() const
Used in InvokeCallback to tell whether it is the right time to run this kind of callback.
void ClearCallback()
Remove the callback from this option set.
void SetIgnoreCount(uint32_t n)
Set the breakpoint to ignore the next count breakpoint hits.
void SetEnabled(bool enabled)
If enable is true, enable the breakpoint, if false disable it.
void SetCondition(const char *condition)
Set the breakpoint option's condition.
uint32_t GetIgnoreCount() const
Return the current Ignore Count.
ThreadSpec * GetThreadSpec()
Returns a pointer to the ThreadSpec for this option, creating it.
const ThreadSpec * GetThreadSpecNoCreate() const
Return the current thread spec for this option.
void SetAutoContinue(bool auto_continue)
Set the auto-continue state.
void SetThreadID(lldb::tid_t thread_id)
const char * GetConditionText(size_t *hash=nullptr) const
Return a pointer to the text of the condition expression.
void SetCallback(BreakpointHitCallback callback, const lldb::BatonSP &baton_sp, bool synchronous=false)
Adds a callback to the breakpoint option set.
BreakpointLocationCollection & GetBreakpointLocationCollection()
Definition: Breakpoint.h:118
General Outline: A breakpoint has four main parts, a filter, a resolver, the list of breakpoint locat...
Definition: Breakpoint.h:81
bool IsAutoContinue() const
Check the AutoContinue state.
Definition: Breakpoint.cpp:335
bool InvokeCallback(StoppointCallbackContext *context, lldb::break_id_t bp_loc_id)
Invoke the callback action when the breakpoint is hit.
Definition: Breakpoint.cpp:433
StoppointHitCounter m_hit_counter
Number of times this breakpoint has been hit.
Definition: Breakpoint.h:668
uint32_t GetIgnoreCount() const
Return the current ignore count/.
Definition: Breakpoint.cpp:320
bool IsEnabled() override
Check the Enable/Disable state.
Definition: Breakpoint.cpp:304
BreakpointOptions & GetOptions()
Returns the BreakpointOptions structure set at the breakpoint level.
Definition: Breakpoint.cpp:438
bool IsHardware() const
Definition: Breakpoint.h:520
Target & GetTarget()
Accessor for the breakpoint Target.
Definition: Breakpoint.h:463
bool IsInternal() const
Tell whether this breakpoint is an "internal" breakpoint.
Definition: Breakpoint.cpp:254
bool EventTypeHasListeners(uint32_t event_type)
Definition: Broadcaster.h:251
void BroadcastEvent(lldb::EventSP &event_sp)
Broadcast an event which has no associated data.
Definition: Broadcaster.h:167
A class that describes a compilation unit.
Definition: CompileUnit.h:41
const FileSpec & GetPrimaryFile() const
Return the primary source file associated with this compile unit.
Definition: CompileUnit.h:227
lldb::LanguageType GetLanguage()
const char * AsCString(const char *value_if_empty=nullptr) const
Get the string value as a C string.
Definition: ConstString.h:182
void Dump(Stream *s, const char *value_if_empty=nullptr) const
Dump the object description to a stream.
const char * GetCString() const
Get the string value as a C string.
Definition: ConstString.h:205
std::string GetString(char separator='\n')
void SetUnwindOnError(bool unwind=false)
Definition: Target.h:332
void SetTryAllThreads(bool try_others=true)
Definition: Target.h:365
void SetIgnoreBreakpoints(bool ignore=false)
Definition: Target.h:336
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
const ConstString & GetFilename() const
Filename string const get accessor.
Definition: FileSpec.h:240
ConstString GetName() const
Definition: Function.cpp:679
void void void void void Warning(const char *fmt,...) __attribute__((format(printf
Definition: Log.cpp:200
A plug-in interface definition class for debugging a process.
Definition: Process.h:336
lldb::break_id_t CreateBreakpointSite(const lldb::BreakpointLocationSP &owner, bool use_hardware)
Definition: Process.cpp:1618
An error handling class.
Definition: Status.h:44
General Outline: When we hit a breakpoint we need to package up whatever information is needed to eva...
void Decrement(uint32_t difference=1)
void Increment(uint32_t difference=1)
lldb::break_id_t GetID() const
Definition: Stoppoint.cpp:22
const char * GetData() const
Definition: StreamString.h:43
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
llvm::raw_ostream & AsRawOstream()
Returns a raw_ostream that forwards the data to this Stream object.
Definition: Stream.h:357
size_t Indent(llvm::StringRef s="")
Indent the current line in the stream.
Definition: Stream.cpp:130
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
Definition: Stream.cpp:107
size_t PutCString(llvm::StringRef cstr)
Output a C string to the stream.
Definition: Stream.cpp:63
size_t EOL()
Output and End of Line character to the stream.
Definition: Stream.cpp:128
void IndentLess(unsigned amount=2)
Decrement the current indentation level.
Definition: Stream.cpp:171
void IndentMore(unsigned amount=2)
Increment the current indentation level.
Definition: Stream.cpp:168
Defines a symbol context baton that can be handed other debug core functions.
Definition: SymbolContext.h:33
bool DumpStopContext(Stream *s, ExecutionContextScope *exe_scope, const Address &so_addr, bool show_fullpaths, bool show_module, bool show_inlined_frames, bool show_function_arguments, bool show_function_name) const
Dump the stop context in this object to a Stream.
Function * function
The Function for a given query.
lldb::ModuleSP module_sp
The Module for a given query.
CompileUnit * comp_unit
The CompileUnit for a given query.
Symbol * symbol
The Symbol for a given query.
LineEntry line_entry
The LineEntry for a given query.
bool IsIndirect() const
Definition: Symbol.cpp:225
ConstString GetName() const
Definition: Symbol.cpp:544
Symbol * CalculateSymbolContextSymbol() override
Definition: Symbol.cpp:447
const lldb::ProcessSP & GetProcessSP() const
Definition: Target.cpp:220
@ eBroadcastBitBreakpointChanged
Definition: Target.h:490
void SetIndex(uint32_t index)
Definition: ThreadSpec.h:45
void SetName(llvm::StringRef name)
Definition: ThreadSpec.h:49
uint32_t GetIndex() const
Definition: ThreadSpec.h:55
const char * GetName() const
Definition: ThreadSpec.cpp:68
void SetQueueName(llvm::StringRef queue_name)
Definition: ThreadSpec.h:51
const char * GetQueueName() const
Definition: ThreadSpec.cpp:72
lldb::tid_t GetTID() const
Definition: ThreadSpec.h:57
virtual bool MatchesSpec(const ThreadSpec *spec)
Definition: Thread.cpp:1046
#define LLDB_INVALID_BREAK_ID
Definition: lldb-defines.h:37
#define LLDB_INVALID_THREAD_ID
Definition: lldb-defines.h:87
#define LLDB_INVALID_INDEX32
Definition: lldb-defines.h:80
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
Definition: Log.h:314
bool(* BreakpointHitCallback)(void *baton, StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id)
Definition: SBAddress.h:15
std::shared_ptr< lldb_private::BreakpointSite > BreakpointSiteSP
Definition: lldb-forward.h:305
std::shared_ptr< lldb_private::BreakpointLocation > BreakpointLocationSP
Definition: lldb-forward.h:306
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
@ eDescriptionLevelBrief
@ eDescriptionLevelInitial
@ eDescriptionLevelFull
@ eDescriptionLevelVerbose
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
Definition: lldb-forward.h:458
std::shared_ptr< lldb_private::ExpressionVariable > ExpressionVariableSP
Definition: lldb-forward.h:333
LanguageType
Programming language type.
@ eLanguageTypeUnknown
Unknown or invalid language value.
ExpressionResults
The results of expression evaluation.
@ eExpressionCompleted
int32_t break_id_t
Definition: lldb-types.h:84
std::shared_ptr< lldb_private::Process > ProcessSP
Definition: lldb-forward.h:368
std::shared_ptr< lldb_private::Baton > BatonSP
Definition: lldb-forward.h:301
uint64_t addr_t
Definition: lldb-types.h:79
uint64_t tid_t
Definition: lldb-types.h:82
uint32_t line
The source line number, or zero if there is no line number information.
Definition: LineEntry.h:143
bool DumpStopContext(Stream *s, bool show_fullpaths) const
Dumps information specific to a process that stops at this line entry to the supplied stream s.
Definition: LineEntry.cpp:50