blob: 9c2eea065ce8d19a2c82b088753d6c0d2b71556c [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBDebugger.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
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000010#include "lldb/API/SBDebugger.h"
Chris Lattner24943d22010-06-08 16:52:24 +000011
Greg Claytonb3448432011-03-24 21:19:54 +000012#include "lldb/lldb-private.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000014#include "lldb/API/SBListener.h"
15#include "lldb/API/SBBroadcaster.h"
16#include "lldb/API/SBCommandInterpreter.h"
17#include "lldb/API/SBCommandReturnObject.h"
Greg Clayton180546b2011-04-30 01:09:13 +000018#include "lldb/API/SBError.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000019#include "lldb/API/SBEvent.h"
20#include "lldb/API/SBFrame.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000021#include "lldb/API/SBInputReader.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000022#include "lldb/API/SBProcess.h"
23#include "lldb/API/SBSourceManager.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000024#include "lldb/API/SBStream.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000025#include "lldb/API/SBStringList.h"
26#include "lldb/API/SBTarget.h"
27#include "lldb/API/SBThread.h"
Greg Clayton887aa282010-10-11 01:05:37 +000028#include "lldb/Core/Debugger.h"
29#include "lldb/Core/State.h"
30#include "lldb/Interpreter/Args.h"
31#include "lldb/Interpreter/CommandInterpreter.h"
Greg Clayton3e8c25f2011-09-24 00:52:29 +000032#include "lldb/Interpreter/OptionGroupPlatform.h"
Greg Clayton887aa282010-10-11 01:05:37 +000033#include "lldb/Target/Process.h"
34#include "lldb/Target/TargetList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000035
36using namespace lldb;
37using namespace lldb_private;
38
39void
40SBDebugger::Initialize ()
41{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000042 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000043
44 if (log)
45 log->Printf ("SBDebugger::Initialize ()");
46
Greg Claytone86cbb92011-03-22 01:14:58 +000047 SBCommandInterpreter::InitializeSWIG ();
48
Chris Lattner24943d22010-06-08 16:52:24 +000049 Debugger::Initialize();
50}
51
52void
53SBDebugger::Terminate ()
54{
55 Debugger::Terminate();
56}
57
Greg Clayton43490d12010-07-30 20:12:55 +000058void
59SBDebugger::Clear ()
60{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000061 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000062
63 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000064 log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
Caroline Ticec0446862010-12-20 18:35:50 +000065
66 if (m_opaque_sp)
67 m_opaque_sp->CleanUpInputReaders ();
Caroline Tice7826c882010-10-26 03:11:13 +000068
Greg Clayton43490d12010-07-30 20:12:55 +000069 m_opaque_sp.reset();
70}
71
Greg Clayton63094e02010-06-23 01:19:29 +000072SBDebugger
73SBDebugger::Create()
74{
Jim Ingham7bbebaf2011-08-13 00:56:10 +000075 return SBDebugger::Create(false);
Jim Ingham558dd5b2011-08-13 00:22:20 +000076}
77
78SBDebugger
79SBDebugger::Create(bool source_init_files)
80{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000081 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000082
Greg Clayton63094e02010-06-23 01:19:29 +000083 SBDebugger debugger;
84 debugger.reset(Debugger::CreateInstance());
Caroline Tice7826c882010-10-26 03:11:13 +000085
86 if (log)
87 {
88 SBStream sstr;
89 debugger.GetDescription (sstr);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000090 log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000091 }
92
Jim Ingham558dd5b2011-08-13 00:22:20 +000093 SBCommandInterpreter interp = debugger.GetCommandInterpreter();
94 if (source_init_files)
95 {
96 interp.get()->SkipLLDBInitFiles(false);
97 interp.get()->SkipAppInitFiles (false);
98 SBCommandReturnObject result;
99 interp.SourceInitFileInHomeDirectory(result);
100 }
101 else
102 {
103 interp.get()->SkipLLDBInitFiles(true);
104 interp.get()->SkipAppInitFiles (true);
105 }
Greg Clayton63094e02010-06-23 01:19:29 +0000106 return debugger;
107}
108
Caroline Ticec4ed12f2011-01-22 01:02:07 +0000109void
110SBDebugger::Destroy (SBDebugger &debugger)
111{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000112 LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticec4ed12f2011-01-22 01:02:07 +0000113
114 if (log)
115 {
116 SBStream sstr;
117 debugger.GetDescription (sstr);
118 log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
119 }
120
121 Debugger::Destroy (debugger.m_opaque_sp);
122
123 if (debugger.m_opaque_sp.get() != NULL)
124 debugger.m_opaque_sp.reset();
125}
126
Greg Claytonc5486872011-12-15 04:38:41 +0000127void
128SBDebugger::MemoryPressureDetected ()
129{
130 ModuleList::RemoveOrphanSharedModules();
131}
132
Greg Clayton63094e02010-06-23 01:19:29 +0000133SBDebugger::SBDebugger () :
134 m_opaque_sp ()
135{
136}
137
Enrico Granata3370f0c2011-08-19 23:56:34 +0000138SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
139 m_opaque_sp(debugger_sp)
140{
141}
142
Greg Clayton538eb822010-11-05 23:17:00 +0000143SBDebugger::SBDebugger(const SBDebugger &rhs) :
144 m_opaque_sp (rhs.m_opaque_sp)
145{
146}
147
148SBDebugger &
149SBDebugger::operator = (const SBDebugger &rhs)
150{
151 if (this != &rhs)
152 {
153 m_opaque_sp = rhs.m_opaque_sp;
154 }
155 return *this;
156}
157
Greg Clayton63094e02010-06-23 01:19:29 +0000158SBDebugger::~SBDebugger ()
159{
160}
161
162bool
163SBDebugger::IsValid() const
164{
165 return m_opaque_sp.get() != NULL;
166}
167
168
Chris Lattner24943d22010-06-08 16:52:24 +0000169void
170SBDebugger::SetAsync (bool b)
171{
Greg Clayton63094e02010-06-23 01:19:29 +0000172 if (m_opaque_sp)
173 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +0000174}
175
Jim Ingham83dd2032011-09-13 23:25:31 +0000176bool
177SBDebugger::GetAsync ()
178{
179 if (m_opaque_sp)
180 return m_opaque_sp->GetAsyncExecution();
181 else
182 return false;
183}
184
Greg Clayton887aa282010-10-11 01:05:37 +0000185void
186SBDebugger::SkipLLDBInitFiles (bool b)
187{
188 if (m_opaque_sp)
189 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
190}
191
Jim Ingham574c3d62011-08-12 23:34:31 +0000192void
193SBDebugger::SkipAppInitFiles (bool b)
194{
195 if (m_opaque_sp)
196 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
197}
198
Chris Lattner24943d22010-06-08 16:52:24 +0000199// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
200// trying to switch modes in the middle of a debugging session.
201void
202SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
203{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000204 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000205
206 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000207 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
208 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000209
Greg Clayton63094e02010-06-23 01:19:29 +0000210 if (m_opaque_sp)
211 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000212}
213
214void
215SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
216{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000217 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000218
219
220 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000221 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
222 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000223
Greg Clayton63094e02010-06-23 01:19:29 +0000224 if (m_opaque_sp)
225 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000226}
227
228void
229SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
230{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000231 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000232
233
234 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000235 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
236 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000237
Greg Clayton63094e02010-06-23 01:19:29 +0000238 if (m_opaque_sp)
239 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000240}
241
242FILE *
243SBDebugger::GetInputFileHandle ()
244{
Greg Clayton63094e02010-06-23 01:19:29 +0000245 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000246 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000247 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000248}
249
250FILE *
251SBDebugger::GetOutputFileHandle ()
252{
Greg Clayton63094e02010-06-23 01:19:29 +0000253 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000254 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000255 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000256}
257
258FILE *
259SBDebugger::GetErrorFileHandle ()
260{
Greg Clayton63094e02010-06-23 01:19:29 +0000261 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000262 return m_opaque_sp->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000263 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000264}
265
266SBCommandInterpreter
267SBDebugger::GetCommandInterpreter ()
268{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000269 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000270
Greg Clayton63094e02010-06-23 01:19:29 +0000271 SBCommandInterpreter sb_interpreter;
272 if (m_opaque_sp)
273 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000274
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000275 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000276 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000277 m_opaque_sp.get(), sb_interpreter.get());
278
Chris Lattner24943d22010-06-08 16:52:24 +0000279 return sb_interpreter;
280}
281
282void
283SBDebugger::HandleCommand (const char *command)
284{
Greg Clayton63094e02010-06-23 01:19:29 +0000285 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000286 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000287 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
288 Mutex::Locker api_locker;
289 if (target_sp)
290 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
291
Greg Clayton63094e02010-06-23 01:19:29 +0000292 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
293 SBCommandReturnObject result;
294
295 sb_interpreter.HandleCommand (command, result, false);
296
297 if (GetErrorFileHandle() != NULL)
298 result.PutError (GetErrorFileHandle());
299 if (GetOutputFileHandle() != NULL)
300 result.PutOutput (GetOutputFileHandle());
301
302 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000303 {
Greg Clayton63094e02010-06-23 01:19:29 +0000304 SBProcess process(GetCommandInterpreter().GetProcess ());
Greg Clayton334d33a2012-01-30 07:41:31 +0000305 ProcessSP process_sp (process.GetSP());
306 if (process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000307 {
Greg Clayton63094e02010-06-23 01:19:29 +0000308 EventSP event_sp;
309 Listener &lldb_listener = m_opaque_sp->GetListener();
Greg Clayton334d33a2012-01-30 07:41:31 +0000310 while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp))
Greg Clayton63094e02010-06-23 01:19:29 +0000311 {
312 SBEvent event(event_sp);
313 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
314 }
Chris Lattner24943d22010-06-08 16:52:24 +0000315 }
316 }
317 }
318}
319
320SBListener
321SBDebugger::GetListener ()
322{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000323 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000324
Greg Clayton63094e02010-06-23 01:19:29 +0000325 SBListener sb_listener;
326 if (m_opaque_sp)
327 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000328
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000329 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000330 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000331 sb_listener.get());
332
Chris Lattner24943d22010-06-08 16:52:24 +0000333 return sb_listener;
334}
335
336void
337SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
338{
Greg Claytonbdcda462010-12-20 20:49:23 +0000339 if (!process.IsValid())
340 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000341
Greg Clayton334d33a2012-01-30 07:41:31 +0000342 TargetSP target_sp (process.GetTarget().GetSP());
343 if (!target_sp)
344 return;
345
Greg Claytonbdcda462010-12-20 20:49:23 +0000346 const uint32_t event_type = event.GetType();
347 char stdio_buffer[1024];
348 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000349
Greg Clayton334d33a2012-01-30 07:41:31 +0000350 Mutex::Locker api_locker (target_sp->GetAPIMutex());
Greg Claytonbdcda462010-12-20 20:49:23 +0000351
352 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000353 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000354 // Drain stdout when we stop just in case we have any bytes
355 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
356 if (out != NULL)
357 ::fwrite (stdio_buffer, 1, len, out);
358 }
359
360 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
361 {
362 // Drain stderr when we stop just in case we have any bytes
363 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
364 if (err != NULL)
365 ::fwrite (stdio_buffer, 1, len, err);
366 }
367
368 if (event_type & Process::eBroadcastBitStateChanged)
369 {
370 StateType event_state = SBProcess::GetStateFromEvent (event);
371
372 if (event_state == eStateInvalid)
373 return;
374
375 bool is_stopped = StateIsStoppedState (event_state);
376 if (!is_stopped)
377 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000378 }
379}
380
Jim Inghamcc637462011-09-13 00:29:56 +0000381SBSourceManager
Chris Lattner24943d22010-06-08 16:52:24 +0000382SBDebugger::GetSourceManager ()
383{
Jim Inghamcc637462011-09-13 00:29:56 +0000384 SBSourceManager sb_source_manager (*this);
385 return sb_source_manager;
Chris Lattner24943d22010-06-08 16:52:24 +0000386}
387
388
389bool
390SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
391{
392 if (arch_name && arch_name_len)
393 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000394 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000395
Chris Lattner24943d22010-06-08 16:52:24 +0000396 if (default_arch.IsValid())
397 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000398 const std::string &triple_str = default_arch.GetTriple().str();
399 if (!triple_str.empty())
400 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
401 else
402 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000403 return true;
404 }
405 }
406 if (arch_name && arch_name_len)
407 arch_name[0] = '\0';
408 return false;
409}
410
411
412bool
413SBDebugger::SetDefaultArchitecture (const char *arch_name)
414{
415 if (arch_name)
416 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000417 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000418 if (arch.IsValid())
419 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000420 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000421 return true;
422 }
423 }
424 return false;
425}
426
427ScriptLanguage
428SBDebugger::GetScriptingLanguage (const char *script_language_name)
429{
Greg Claytonbdcda462010-12-20 20:49:23 +0000430
Chris Lattner24943d22010-06-08 16:52:24 +0000431 return Args::StringToScriptLanguage (script_language_name,
432 eScriptLanguageDefault,
433 NULL);
434}
Chris Lattner24943d22010-06-08 16:52:24 +0000435
436const char *
437SBDebugger::GetVersionString ()
438{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000439 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000440}
441
442const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000443SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000444{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000445 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000446}
447
448bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000449SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000450{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000451 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000452
Caroline Ticea2cffd32011-04-25 22:05:51 +0000453 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000454 if (log)
455 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000456 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000457
458 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000459}
460
461bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000462SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000463{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000464 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000465
Greg Clayton20206082011-11-17 01:23:07 +0000466 const bool result = lldb_private::StateIsStoppedState (state, false);
Caroline Tice7826c882010-10-26 03:11:13 +0000467 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000468 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000469 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000470
Greg Claytona66ba462010-10-30 04:51:46 +0000471 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000472}
473
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000474lldb::SBTarget
475SBDebugger::CreateTarget (const char *filename,
476 const char *target_triple,
477 const char *platform_name,
478 bool add_dependent_modules,
479 lldb::SBError& sb_error)
480{
481 SBTarget sb_target;
Greg Clayton334d33a2012-01-30 07:41:31 +0000482 TargetSP target_sp;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000483 if (m_opaque_sp)
484 {
485 sb_error.Clear();
486 FileSpec filename_spec (filename, true);
487 OptionGroupPlatform platform_options (false);
488 platform_options.SetPlatformName (platform_name);
489
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000490 sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
491 filename_spec,
492 target_triple,
493 add_dependent_modules,
494 &platform_options,
495 target_sp);
496
497 if (sb_error.Success())
Greg Clayton334d33a2012-01-30 07:41:31 +0000498 sb_target.SetSP (target_sp);
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000499 }
500 else
501 {
502 sb_error.SetErrorString("invalid target");
503 }
504
505 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
506 if (log)
507 {
508 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)",
509 m_opaque_sp.get(),
510 filename,
511 target_triple,
512 platform_name,
513 add_dependent_modules,
514 sb_error.GetCString(),
Greg Clayton334d33a2012-01-30 07:41:31 +0000515 target_sp.get());
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000516 }
517
518 return sb_target;
519}
Chris Lattner24943d22010-06-08 16:52:24 +0000520
521SBTarget
522SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
523 const char *target_triple)
524{
Greg Clayton334d33a2012-01-30 07:41:31 +0000525 SBTarget sb_target;
526 TargetSP target_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000527 if (m_opaque_sp)
528 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000529 FileSpec file_spec (filename, true);
Greg Clayton63094e02010-06-23 01:19:29 +0000530 TargetSP target_sp;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000531 const bool add_dependent_modules = true;
532 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
533 file_spec,
534 target_triple,
535 add_dependent_modules,
536 NULL,
537 target_sp));
Greg Clayton334d33a2012-01-30 07:41:31 +0000538 sb_target.SetSP (target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000539 }
Greg Claytona66ba462010-10-30 04:51:46 +0000540
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000541 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000542 if (log)
543 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000544 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Clayton334d33a2012-01-30 07:41:31 +0000545 m_opaque_sp.get(), filename, target_triple, target_sp.get());
Greg Claytona66ba462010-10-30 04:51:46 +0000546 }
547
Greg Clayton334d33a2012-01-30 07:41:31 +0000548 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000549}
550
551SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000552SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000553{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000554 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000555
Greg Clayton334d33a2012-01-30 07:41:31 +0000556 SBTarget sb_target;
557 TargetSP target_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000558 if (m_opaque_sp)
559 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000560 FileSpec file (filename, true);
Greg Clayton63094e02010-06-23 01:19:29 +0000561 Error error;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000562 const bool add_dependent_modules = true;
Chris Lattner24943d22010-06-08 16:52:24 +0000563
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000564 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
565 file,
566 arch_cstr,
567 add_dependent_modules,
568 NULL,
569 target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000570
571 if (error.Success())
572 {
Jim Inghamc8332952010-08-26 21:32:51 +0000573 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton334d33a2012-01-30 07:41:31 +0000574 sb_target.SetSP (target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000575 }
Chris Lattner24943d22010-06-08 16:52:24 +0000576 }
Caroline Tice7826c882010-10-26 03:11:13 +0000577
578 if (log)
579 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000580 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton334d33a2012-01-30 07:41:31 +0000581 m_opaque_sp.get(), filename, arch_cstr, target_sp.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000582 }
583
Greg Clayton334d33a2012-01-30 07:41:31 +0000584 return sb_target;
Greg Clayton63094e02010-06-23 01:19:29 +0000585}
586
587SBTarget
588SBDebugger::CreateTarget (const char *filename)
589{
Greg Clayton334d33a2012-01-30 07:41:31 +0000590 SBTarget sb_target;
591 TargetSP target_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000592 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000593 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000594 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000595 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000596 Error error;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000597 const bool add_dependent_modules = true;
Greg Clayton63094e02010-06-23 01:19:29 +0000598
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000599 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
600 file,
601 arch,
602 add_dependent_modules,
603 m_opaque_sp->GetPlatformList().GetSelectedPlatform(),
604 target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000605
606 if (error.Success())
607 {
Jim Inghamc8332952010-08-26 21:32:51 +0000608 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton334d33a2012-01-30 07:41:31 +0000609 sb_target.SetSP (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000610 }
611 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000612 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000613 if (log)
614 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000615 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Clayton334d33a2012-01-30 07:41:31 +0000616 m_opaque_sp.get(), filename, target_sp.get());
Greg Claytona66ba462010-10-30 04:51:46 +0000617 }
Greg Clayton334d33a2012-01-30 07:41:31 +0000618 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000619}
620
Johnny Chen409646d2011-06-15 21:24:24 +0000621bool
622SBDebugger::DeleteTarget (lldb::SBTarget &target)
623{
624 bool result = false;
Greg Clayton334d33a2012-01-30 07:41:31 +0000625 if (m_opaque_sp)
Johnny Chen409646d2011-06-15 21:24:24 +0000626 {
Greg Clayton334d33a2012-01-30 07:41:31 +0000627 TargetSP target_sp(target.GetSP());
628 if (target_sp)
629 {
630 // No need to lock, the target list is thread safe
631 result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp);
632 target_sp->Destroy();
633 target.Clear();
634 ModuleList::RemoveOrphanSharedModules();
635 }
Johnny Chen409646d2011-06-15 21:24:24 +0000636 }
637
638 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
639 if (log)
640 {
641 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
642 }
643
644 return result;
645}
Chris Lattner24943d22010-06-08 16:52:24 +0000646SBTarget
647SBDebugger::GetTargetAtIndex (uint32_t idx)
648{
Greg Clayton63094e02010-06-23 01:19:29 +0000649 SBTarget sb_target;
650 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000651 {
652 // No need to lock, the target list is thread safe
Greg Clayton334d33a2012-01-30 07:41:31 +0000653 sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000654 }
Chris Lattner24943d22010-06-08 16:52:24 +0000655 return sb_target;
656}
657
658SBTarget
659SBDebugger::FindTargetWithProcessID (pid_t pid)
660{
Greg Clayton63094e02010-06-23 01:19:29 +0000661 SBTarget sb_target;
662 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000663 {
664 // No need to lock, the target list is thread safe
Greg Clayton334d33a2012-01-30 07:41:31 +0000665 sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000666 }
Chris Lattner24943d22010-06-08 16:52:24 +0000667 return sb_target;
668}
669
670SBTarget
671SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
672{
Greg Clayton63094e02010-06-23 01:19:29 +0000673 SBTarget sb_target;
674 if (m_opaque_sp && filename && filename[0])
675 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000676 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000677 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000678 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton334d33a2012-01-30 07:41:31 +0000679 sb_target.SetSP (target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000680 }
681 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000682}
683
684SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000685SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000686{
Greg Clayton63094e02010-06-23 01:19:29 +0000687 SBTarget sb_target;
688 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000689 {
690 // No need to lock, the target list is thread safe
Greg Clayton334d33a2012-01-30 07:41:31 +0000691 sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000692 }
Chris Lattner24943d22010-06-08 16:52:24 +0000693 return sb_target;
694}
695
696
697uint32_t
698SBDebugger::GetNumTargets ()
699{
Greg Clayton63094e02010-06-23 01:19:29 +0000700 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000701 {
702 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000703 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000704 }
Greg Clayton63094e02010-06-23 01:19:29 +0000705 return 0;
706}
Chris Lattner24943d22010-06-08 16:52:24 +0000707
708SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000709SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000710{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000711 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000712
Greg Clayton63094e02010-06-23 01:19:29 +0000713 SBTarget sb_target;
Greg Clayton334d33a2012-01-30 07:41:31 +0000714 TargetSP target_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000715 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000716 {
717 // No need to lock, the target list is thread safe
Greg Clayton334d33a2012-01-30 07:41:31 +0000718 target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget ();
719 sb_target.SetSP (target_sp);
Greg Claytonbdcda462010-12-20 20:49:23 +0000720 }
Caroline Tice7826c882010-10-26 03:11:13 +0000721
722 if (log)
723 {
724 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000725 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000726 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Greg Clayton334d33a2012-01-30 07:41:31 +0000727 target_sp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000728 }
729
Chris Lattner24943d22010-06-08 16:52:24 +0000730 return sb_target;
731}
732
733void
Jim Ingham83dd2032011-09-13 23:25:31 +0000734SBDebugger::SetSelectedTarget (SBTarget &sb_target)
735{
736 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
737
Greg Clayton334d33a2012-01-30 07:41:31 +0000738 TargetSP target_sp (sb_target.GetSP());
Jim Ingham83dd2032011-09-13 23:25:31 +0000739 if (m_opaque_sp)
740 {
Greg Clayton334d33a2012-01-30 07:41:31 +0000741 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Jim Ingham83dd2032011-09-13 23:25:31 +0000742 }
743 if (log)
744 {
745 SBStream sstr;
746 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
747 log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Greg Clayton334d33a2012-01-30 07:41:31 +0000748 target_sp.get(), sstr.GetData());
Jim Ingham83dd2032011-09-13 23:25:31 +0000749 }
750}
751
752void
Chris Lattner24943d22010-06-08 16:52:24 +0000753SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
754{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000755 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000756
757 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000758 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
759 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000760
Greg Clayton63094e02010-06-23 01:19:29 +0000761 if (m_opaque_sp)
762 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000763}
764
765void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000766SBDebugger::DispatchInputInterrupt ()
767{
768 if (m_opaque_sp)
769 m_opaque_sp->DispatchInputInterrupt ();
770}
771
772void
773SBDebugger::DispatchInputEndOfFile ()
774{
775 if (m_opaque_sp)
776 m_opaque_sp->DispatchInputEndOfFile ();
777}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000778
779bool
780SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
781{
782 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
783
784 if (log)
785 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
786
787 if (m_opaque_sp && reader.IsValid())
788 {
789 InputReaderSP reader_sp (*reader);
790 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
791 }
792
793 return false;
794}
795
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000796
797void
Chris Lattner24943d22010-06-08 16:52:24 +0000798SBDebugger::PushInputReader (SBInputReader &reader)
799{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000800 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000801
802 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000803 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000804
Greg Clayton63094e02010-06-23 01:19:29 +0000805 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000806 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000807 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
808 Mutex::Locker api_locker;
809 if (target_sp)
810 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000811 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000812 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000813 }
814}
Greg Clayton63094e02010-06-23 01:19:29 +0000815
816void
Caroline Tice4a348082011-05-02 20:41:46 +0000817SBDebugger::NotifyTopInputReader (InputReaderAction notification)
818{
819 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
820
821 if (log)
822 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
823
824 if (m_opaque_sp)
825 m_opaque_sp->NotifyTopInputReader (notification);
826}
827
828void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000829SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000830{
831 m_opaque_sp = debugger_sp;
832}
833
834Debugger *
835SBDebugger::get () const
836{
837 return m_opaque_sp.get();
838}
839
840Debugger &
841SBDebugger::ref () const
842{
843 assert (m_opaque_sp.get());
844 return *m_opaque_sp;
845}
846
Greg Clayton15afa9f2011-10-01 02:59:24 +0000847const lldb::DebuggerSP &
848SBDebugger::get_sp () const
849{
850 return m_opaque_sp;
851}
Greg Clayton63094e02010-06-23 01:19:29 +0000852
Caroline Tice558be582010-06-30 16:22:25 +0000853SBDebugger
854SBDebugger::FindDebuggerWithID (int id)
855{
Greg Claytonbdcda462010-12-20 20:49:23 +0000856 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000857 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000858 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000859 if (debugger_sp)
860 sb_debugger.reset (debugger_sp);
861 return sb_debugger;
862}
Jim Ingham74989e82010-08-30 19:44:40 +0000863
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000864const char *
865SBDebugger::GetInstanceName()
866{
867 if (m_opaque_sp)
868 return m_opaque_sp->GetInstanceName().AsCString();
869 else
870 return NULL;
871}
872
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000873SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000874SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000875{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000876 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000877
Greg Claytonb3448432011-03-24 21:19:54 +0000878 Error err = root_settings_controller->SetVariable (var_name,
879 value,
880 eVarSetOperationAssign,
881 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000882 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000883 SBError sb_error;
884 sb_error.SetError (err);
885
886 return sb_error;
887}
888
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000889SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000890SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000891{
892 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000893 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000894 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000895
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000896 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000897
Caroline Tice5bc8c972010-09-20 20:44:43 +0000898 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
899
900 if (err.Success())
901 {
902 for (unsigned i = 0; i != value.GetSize(); ++i)
903 ret_value.AppendString (value.GetStringAtIndex(i));
904 }
905 else
906 {
907 ret_value.AppendString (err.AsCString());
908 }
909
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000910
911 return ret_value;
912}
913
Greg Clayton238c0a12010-09-18 01:14:36 +0000914uint32_t
915SBDebugger::GetTerminalWidth () const
916{
917 if (m_opaque_sp)
918 return m_opaque_sp->GetTerminalWidth ();
919 return 0;
920}
921
922void
923SBDebugger::SetTerminalWidth (uint32_t term_width)
924{
925 if (m_opaque_sp)
926 m_opaque_sp->SetTerminalWidth (term_width);
927}
928
929const char *
930SBDebugger::GetPrompt() const
931{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000932 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000933
934 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000935 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000936 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000937
Greg Clayton238c0a12010-09-18 01:14:36 +0000938 if (m_opaque_sp)
939 return m_opaque_sp->GetPrompt ();
940 return 0;
941}
942
943void
944SBDebugger::SetPrompt (const char *prompt)
945{
946 if (m_opaque_sp)
947 m_opaque_sp->SetPrompt (prompt);
948}
949
950
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000951ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000952SBDebugger::GetScriptLanguage() const
953{
954 if (m_opaque_sp)
955 return m_opaque_sp->GetScriptLanguage ();
956 return eScriptLanguageNone;
957}
958
959void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000960SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000961{
962 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000963 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000964 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000965 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000966}
967
Jim Ingham74989e82010-08-30 19:44:40 +0000968bool
969SBDebugger::SetUseExternalEditor (bool value)
970{
971 if (m_opaque_sp)
972 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000973 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000974}
975
976bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000977SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000978{
979 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000980 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000981 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000982}
983
Caroline Tice98f930f2010-09-20 05:20:02 +0000984bool
985SBDebugger::GetDescription (SBStream &description)
986{
Greg Clayton96154be2011-11-13 06:57:31 +0000987 Stream &strm = description.ref();
988
Caroline Tice98f930f2010-09-20 05:20:02 +0000989 if (m_opaque_sp)
990 {
991 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000992 user_id_t id = m_opaque_sp->GetID();
Greg Clayton96154be2011-11-13 06:57:31 +0000993 strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000994 }
995 else
Greg Clayton96154be2011-11-13 06:57:31 +0000996 strm.PutCString ("No value");
Caroline Tice98f930f2010-09-20 05:20:02 +0000997
998 return true;
999}
Caroline Ticec4f55fe2010-11-19 20:47:54 +00001000
Greg Clayton9ce9c3c2011-04-18 23:15:17 +00001001user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +00001002SBDebugger::GetID()
1003{
1004 if (m_opaque_sp)
1005 return m_opaque_sp->GetID();
1006 return LLDB_INVALID_UID;
1007}
Greg Clayton180546b2011-04-30 01:09:13 +00001008
1009
1010SBError
1011SBDebugger::SetCurrentPlatform (const char *platform_name)
1012{
1013 SBError sb_error;
1014 if (m_opaque_sp)
1015 {
1016 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
1017
1018 if (platform_sp)
1019 {
1020 bool make_selected = true;
1021 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
1022 }
1023 }
1024 return sb_error;
1025}
1026
Greg Clayton421ca502011-05-29 04:06:55 +00001027bool
Greg Clayton604f0d32011-06-17 03:31:01 +00001028SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1029{
1030 if (m_opaque_sp)
1031 {
1032 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1033
1034 if (platform_sp)
1035 {
1036 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1037 return true;
1038 }
1039 }
1040 return false;
1041}
1042
1043bool
Greg Clayton421ca502011-05-29 04:06:55 +00001044SBDebugger::GetCloseInputOnEOF () const
1045{
1046 if (m_opaque_sp)
1047 return m_opaque_sp->GetCloseInputOnEOF ();
1048 return false;
1049}
1050
1051void
1052SBDebugger::SetCloseInputOnEOF (bool b)
1053{
1054 if (m_opaque_sp)
1055 m_opaque_sp->SetCloseInputOnEOF (b);
1056}