blob: 99ac0277e7000351a3992f638ff5d673b1b92b9d [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- SBBreakpointLocation.cpp --------------------------------*- 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#include "lldb/API/SBBreakpointLocation.h"
Greg Claytonf644ddf2011-09-24 01:37:21 +000011#include "lldb/API/SBAddress.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000012#include "lldb/API/SBDebugger.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000013#include "lldb/API/SBDefines.h"
Caroline Ticedde9cff2010-09-20 05:20:02 +000014#include "lldb/API/SBStream.h"
Jim Inghamaf26b222017-08-02 00:16:10 +000015#include "lldb/API/SBStringList.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000016
Greg Clayton4e78f602010-11-18 18:52:36 +000017#include "lldb/Breakpoint/Breakpoint.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000018#include "lldb/Breakpoint/BreakpointLocation.h"
Jim Inghamd80102e2014-04-02 01:04:55 +000019#include "lldb/Core/Debugger.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000020#include "lldb/Core/StreamFile.h"
Jim Inghamd80102e2014-04-02 01:04:55 +000021#include "lldb/Interpreter/CommandInterpreter.h"
22#include "lldb/Interpreter/ScriptInterpreter.h"
Greg Claytonaf67cec2010-12-20 20:49:23 +000023#include "lldb/Target/Target.h"
Jim Ingham62b02c62010-06-18 01:47:08 +000024#include "lldb/Target/ThreadSpec.h"
Zachary Turner6f9e6902017-03-03 20:56:28 +000025#include "lldb/Utility/Log.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000026#include "lldb/Utility/Stream.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000027#include "lldb/lldb-defines.h"
28#include "lldb/lldb-types.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000029
30using namespace lldb;
31using namespace lldb_private;
32
Pavel Labathc5789432017-03-01 10:08:48 +000033SBBreakpointLocation::SBBreakpointLocation() {}
Chris Lattner30fdc8d2010-06-08 16:52:24 +000034
Kate Stoneb9c1b512016-09-06 20:57:50 +000035SBBreakpointLocation::SBBreakpointLocation(
36 const lldb::BreakpointLocationSP &break_loc_sp)
Pavel Labathc5789432017-03-01 10:08:48 +000037 : m_opaque_wp(break_loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
39
40 if (log) {
41 SBStream sstr;
42 GetDescription(sstr, lldb::eDescriptionLevelBrief);
Pavel Labathc5789432017-03-01 10:08:48 +000043 LLDB_LOG(log, "location = {0} ({1})", break_loc_sp.get(), sstr.GetData());
Kate Stoneb9c1b512016-09-06 20:57:50 +000044 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +000045}
46
Kate Stoneb9c1b512016-09-06 20:57:50 +000047SBBreakpointLocation::SBBreakpointLocation(const SBBreakpointLocation &rhs)
Pavel Labathc5789432017-03-01 10:08:48 +000048 : m_opaque_wp(rhs.m_opaque_wp) {}
Caroline Ticeceb6b132010-10-26 03:11:13 +000049
Kate Stoneb9c1b512016-09-06 20:57:50 +000050const SBBreakpointLocation &SBBreakpointLocation::
51operator=(const SBBreakpointLocation &rhs) {
Pavel Labathc5789432017-03-01 10:08:48 +000052 m_opaque_wp = rhs.m_opaque_wp;
Kate Stoneb9c1b512016-09-06 20:57:50 +000053 return *this;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000054}
55
Kate Stoneb9c1b512016-09-06 20:57:50 +000056SBBreakpointLocation::~SBBreakpointLocation() {}
57
Pavel Labathc5789432017-03-01 10:08:48 +000058BreakpointLocationSP SBBreakpointLocation::GetSP() const {
59 return m_opaque_wp.lock();
60}
61
62bool SBBreakpointLocation::IsValid() const { return bool(GetSP()); }
Kate Stoneb9c1b512016-09-06 20:57:50 +000063
64SBAddress SBBreakpointLocation::GetAddress() {
Pavel Labathc5789432017-03-01 10:08:48 +000065 BreakpointLocationSP loc_sp = GetSP();
66 if (loc_sp)
67 return SBAddress(&loc_sp->GetAddress());
Kate Stoneb9c1b512016-09-06 20:57:50 +000068 else
69 return SBAddress();
Greg Claytonefabb122010-11-05 23:17:00 +000070}
71
Kate Stoneb9c1b512016-09-06 20:57:50 +000072addr_t SBBreakpointLocation::GetLoadAddress() {
73 addr_t ret_addr = LLDB_INVALID_ADDRESS;
Pavel Labathc5789432017-03-01 10:08:48 +000074 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +000075
Pavel Labathc5789432017-03-01 10:08:48 +000076 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000077 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +000078 loc_sp->GetTarget().GetAPIMutex());
79 ret_addr = loc_sp->GetLoadAddress();
Kate Stoneb9c1b512016-09-06 20:57:50 +000080 }
81
82 return ret_addr;
Greg Claytonefabb122010-11-05 23:17:00 +000083}
84
Kate Stoneb9c1b512016-09-06 20:57:50 +000085void SBBreakpointLocation::SetEnabled(bool enabled) {
Pavel Labathc5789432017-03-01 10:08:48 +000086 BreakpointLocationSP loc_sp = GetSP();
87 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000088 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +000089 loc_sp->GetTarget().GetAPIMutex());
90 loc_sp->SetEnabled(enabled);
Kate Stoneb9c1b512016-09-06 20:57:50 +000091 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +000092}
93
Kate Stoneb9c1b512016-09-06 20:57:50 +000094bool SBBreakpointLocation::IsEnabled() {
Pavel Labathc5789432017-03-01 10:08:48 +000095 BreakpointLocationSP loc_sp = GetSP();
96 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000097 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +000098 loc_sp->GetTarget().GetAPIMutex());
99 return loc_sp->IsEnabled();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000100 } else
Greg Claytonaf67cec2010-12-20 20:49:23 +0000101 return false;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000102}
103
Bruce Mitchenerccbf7982017-07-19 14:31:19 +0000104uint32_t SBBreakpointLocation::GetHitCount() {
105 BreakpointLocationSP loc_sp = GetSP();
106 if (loc_sp) {
107 std::lock_guard<std::recursive_mutex> guard(
108 loc_sp->GetTarget().GetAPIMutex());
109 return loc_sp->GetHitCount();
110 } else
111 return 0;
112}
113
Kate Stoneb9c1b512016-09-06 20:57:50 +0000114uint32_t SBBreakpointLocation::GetIgnoreCount() {
Pavel Labathc5789432017-03-01 10:08:48 +0000115 BreakpointLocationSP loc_sp = GetSP();
116 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000117 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000118 loc_sp->GetTarget().GetAPIMutex());
119 return loc_sp->GetIgnoreCount();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000120 } else
121 return 0;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000122}
123
Kate Stoneb9c1b512016-09-06 20:57:50 +0000124void SBBreakpointLocation::SetIgnoreCount(uint32_t n) {
Pavel Labathc5789432017-03-01 10:08:48 +0000125 BreakpointLocationSP loc_sp = GetSP();
126 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000127 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000128 loc_sp->GetTarget().GetAPIMutex());
129 loc_sp->SetIgnoreCount(n);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000130 }
Caroline Ticedde9cff2010-09-20 05:20:02 +0000131}
132
Kate Stoneb9c1b512016-09-06 20:57:50 +0000133void SBBreakpointLocation::SetCondition(const char *condition) {
Pavel Labathc5789432017-03-01 10:08:48 +0000134 BreakpointLocationSP loc_sp = GetSP();
135 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000136 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000137 loc_sp->GetTarget().GetAPIMutex());
138 loc_sp->SetCondition(condition);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000139 }
Jim Inghamb08a9442012-05-16 00:51:15 +0000140}
141
Kate Stoneb9c1b512016-09-06 20:57:50 +0000142const char *SBBreakpointLocation::GetCondition() {
Pavel Labathc5789432017-03-01 10:08:48 +0000143 BreakpointLocationSP loc_sp = GetSP();
144 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000145 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000146 loc_sp->GetTarget().GetAPIMutex());
147 return loc_sp->GetConditionText();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000148 }
149 return NULL;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000150}
151
Jim Inghamf08f5c92017-08-03 18:13:24 +0000152void SBBreakpointLocation::SetAutoContinue(bool auto_continue) {
153 BreakpointLocationSP loc_sp = GetSP();
154 if (loc_sp) {
155 std::lock_guard<std::recursive_mutex> guard(
156 loc_sp->GetTarget().GetAPIMutex());
157 loc_sp->SetAutoContinue(auto_continue);
158 }
159}
160
161bool SBBreakpointLocation::GetAutoContinue() {
162 BreakpointLocationSP loc_sp = GetSP();
163 if (loc_sp) {
164 std::lock_guard<std::recursive_mutex> guard(
165 loc_sp->GetTarget().GetAPIMutex());
166 return loc_sp->IsAutoContinue();
167 }
Jim Ingham1c7dc822017-08-03 19:38:38 +0000168 return false;
Jim Inghamf08f5c92017-08-03 18:13:24 +0000169}
170
Kate Stoneb9c1b512016-09-06 20:57:50 +0000171void SBBreakpointLocation::SetScriptCallbackFunction(
172 const char *callback_function_name) {
173 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
Pavel Labathc5789432017-03-01 10:08:48 +0000174 BreakpointLocationSP loc_sp = GetSP();
175 LLDB_LOG(log, "location = {0}, callback = {1}", loc_sp.get(),
176 callback_function_name);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000177
Pavel Labathc5789432017-03-01 10:08:48 +0000178 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000179 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000180 loc_sp->GetTarget().GetAPIMutex());
181 BreakpointOptions *bp_options = loc_sp->GetLocationOptions();
182 loc_sp->GetBreakpoint()
Kate Stoneb9c1b512016-09-06 20:57:50 +0000183 .GetTarget()
184 .GetDebugger()
185 .GetCommandInterpreter()
186 .GetScriptInterpreter()
187 ->SetBreakpointCommandCallbackFunction(bp_options,
188 callback_function_name);
189 }
190}
191
192SBError
193SBBreakpointLocation::SetScriptCallbackBody(const char *callback_body_text) {
194 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
Pavel Labathc5789432017-03-01 10:08:48 +0000195 BreakpointLocationSP loc_sp = GetSP();
196 LLDB_LOG(log, "location = {0}: callback body:\n{1}", loc_sp.get(),
197 callback_body_text);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000198
199 SBError sb_error;
Pavel Labathc5789432017-03-01 10:08:48 +0000200 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000201 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000202 loc_sp->GetTarget().GetAPIMutex());
203 BreakpointOptions *bp_options = loc_sp->GetLocationOptions();
Zachary Turner97206d52017-05-12 04:51:55 +0000204 Status error =
Pavel Labathc5789432017-03-01 10:08:48 +0000205 loc_sp->GetBreakpoint()
Kate Stoneb9c1b512016-09-06 20:57:50 +0000206 .GetTarget()
207 .GetDebugger()
208 .GetCommandInterpreter()
209 .GetScriptInterpreter()
210 ->SetBreakpointCommandCallback(bp_options, callback_body_text);
211 sb_error.SetError(error);
212 } else
213 sb_error.SetErrorString("invalid breakpoint");
214
215 return sb_error;
216}
217
Jim Inghamaf26b222017-08-02 00:16:10 +0000218void SBBreakpointLocation::SetCommandLineCommands(SBStringList &commands) {
219 BreakpointLocationSP loc_sp = GetSP();
220 if (!loc_sp)
221 return;
222 if (commands.GetSize() == 0)
223 return;
224
225 std::lock_guard<std::recursive_mutex> guard(
226 loc_sp->GetTarget().GetAPIMutex());
227 std::unique_ptr<BreakpointOptions::CommandData> cmd_data_up(
228 new BreakpointOptions::CommandData(*commands, eScriptLanguageNone));
229
230 loc_sp->GetLocationOptions()->SetCommandDataCallback(cmd_data_up);
231}
232
233bool SBBreakpointLocation::GetCommandLineCommands(SBStringList &commands) {
234 BreakpointLocationSP loc_sp = GetSP();
235 if (!loc_sp)
236 return false;
237 StringList command_list;
238 bool has_commands =
239 loc_sp->GetLocationOptions()->GetCommandLineCallbacks(command_list);
240 if (has_commands)
241 commands.AppendList(command_list);
242 return has_commands;
243}
244
Kate Stoneb9c1b512016-09-06 20:57:50 +0000245void SBBreakpointLocation::SetThreadID(tid_t thread_id) {
Pavel Labathc5789432017-03-01 10:08:48 +0000246 BreakpointLocationSP loc_sp = GetSP();
247 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000248 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000249 loc_sp->GetTarget().GetAPIMutex());
250 loc_sp->SetThreadID(thread_id);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000251 }
252}
253
254tid_t SBBreakpointLocation::GetThreadID() {
255 tid_t tid = LLDB_INVALID_THREAD_ID;
Pavel Labathc5789432017-03-01 10:08:48 +0000256 BreakpointLocationSP loc_sp = GetSP();
257 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000258 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000259 loc_sp->GetTarget().GetAPIMutex());
260 return loc_sp->GetThreadID();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000261 }
262 return tid;
263}
264
265void SBBreakpointLocation::SetThreadIndex(uint32_t index) {
Pavel Labathc5789432017-03-01 10:08:48 +0000266 BreakpointLocationSP loc_sp = GetSP();
267 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000268 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000269 loc_sp->GetTarget().GetAPIMutex());
270 loc_sp->SetThreadIndex(index);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000271 }
272}
273
274uint32_t SBBreakpointLocation::GetThreadIndex() const {
275 uint32_t thread_idx = UINT32_MAX;
Pavel Labathc5789432017-03-01 10:08:48 +0000276 BreakpointLocationSP loc_sp = GetSP();
277 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000278 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000279 loc_sp->GetTarget().GetAPIMutex());
280 return loc_sp->GetThreadIndex();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000281 }
282 return thread_idx;
283}
284
285void SBBreakpointLocation::SetThreadName(const char *thread_name) {
Pavel Labathc5789432017-03-01 10:08:48 +0000286 BreakpointLocationSP loc_sp = GetSP();
287 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000288 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000289 loc_sp->GetTarget().GetAPIMutex());
290 loc_sp->SetThreadName(thread_name);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000291 }
292}
293
294const char *SBBreakpointLocation::GetThreadName() const {
Pavel Labathc5789432017-03-01 10:08:48 +0000295 BreakpointLocationSP loc_sp = GetSP();
296 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000297 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000298 loc_sp->GetTarget().GetAPIMutex());
299 return loc_sp->GetThreadName();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000300 }
301 return NULL;
302}
303
304void SBBreakpointLocation::SetQueueName(const char *queue_name) {
Pavel Labathc5789432017-03-01 10:08:48 +0000305 BreakpointLocationSP loc_sp = GetSP();
306 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000307 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000308 loc_sp->GetTarget().GetAPIMutex());
309 loc_sp->SetQueueName(queue_name);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000310 }
311}
312
313const char *SBBreakpointLocation::GetQueueName() const {
Pavel Labathc5789432017-03-01 10:08:48 +0000314 BreakpointLocationSP loc_sp = GetSP();
315 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000316 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000317 loc_sp->GetTarget().GetAPIMutex());
318 loc_sp->GetQueueName();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000319 }
320 return NULL;
321}
322
323bool SBBreakpointLocation::IsResolved() {
Pavel Labathc5789432017-03-01 10:08:48 +0000324 BreakpointLocationSP loc_sp = GetSP();
325 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000326 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000327 loc_sp->GetTarget().GetAPIMutex());
328 return loc_sp->IsResolved();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000329 }
330 return false;
331}
332
333void SBBreakpointLocation::SetLocation(
334 const lldb::BreakpointLocationSP &break_loc_sp) {
335 // Uninstall the callbacks?
Pavel Labathc5789432017-03-01 10:08:48 +0000336 m_opaque_wp = break_loc_sp;
Kate Stoneb9c1b512016-09-06 20:57:50 +0000337}
338
339bool SBBreakpointLocation::GetDescription(SBStream &description,
340 DescriptionLevel level) {
341 Stream &strm = description.ref();
Pavel Labathc5789432017-03-01 10:08:48 +0000342 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000343
Pavel Labathc5789432017-03-01 10:08:48 +0000344 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000345 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000346 loc_sp->GetTarget().GetAPIMutex());
347 loc_sp->GetDescription(&strm, level);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000348 strm.EOL();
349 } else
350 strm.PutCString("No value");
351
352 return true;
353}
354
355break_id_t SBBreakpointLocation::GetID() {
Pavel Labathc5789432017-03-01 10:08:48 +0000356 BreakpointLocationSP loc_sp = GetSP();
357 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000358 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000359 loc_sp->GetTarget().GetAPIMutex());
360 return loc_sp->GetID();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000361 } else
362 return LLDB_INVALID_BREAK_ID;
363}
364
365SBBreakpoint SBBreakpointLocation::GetBreakpoint() {
366 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
Pavel Labathc5789432017-03-01 10:08:48 +0000367 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000368
369 SBBreakpoint sb_bp;
Pavel Labathc5789432017-03-01 10:08:48 +0000370 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000371 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000372 loc_sp->GetTarget().GetAPIMutex());
373 sb_bp = loc_sp->GetBreakpoint().shared_from_this();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000374 }
375
376 if (log) {
377 SBStream sstr;
378 sb_bp.GetDescription(sstr);
Pavel Labathc5789432017-03-01 10:08:48 +0000379 LLDB_LOG(log, "location = {0}, breakpoint = {1} ({2})", loc_sp.get(),
380 sb_bp.GetSP().get(), sstr.GetData());
Kate Stoneb9c1b512016-09-06 20:57:50 +0000381 }
382 return sb_bp;
383}