blob: 6a68e3bf34e136fd56946b90b9c35dbdb6e62871 [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
12#include "lldb/lldb-include.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"
18#include "lldb/API/SBEvent.h"
19#include "lldb/API/SBFrame.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000020#include "lldb/API/SBInputReader.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000021#include "lldb/API/SBProcess.h"
22#include "lldb/API/SBSourceManager.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000023#include "lldb/API/SBStream.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000024#include "lldb/API/SBStringList.h"
25#include "lldb/API/SBTarget.h"
26#include "lldb/API/SBThread.h"
Greg Clayton887aa282010-10-11 01:05:37 +000027#include "lldb/Core/Debugger.h"
28#include "lldb/Core/State.h"
29#include "lldb/Interpreter/Args.h"
30#include "lldb/Interpreter/CommandInterpreter.h"
31#include "lldb/Target/Process.h"
32#include "lldb/Target/TargetList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000033
34using namespace lldb;
35using namespace lldb_private;
36
37void
38SBDebugger::Initialize ()
39{
40 Debugger::Initialize();
41}
42
43void
44SBDebugger::Terminate ()
45{
46 Debugger::Terminate();
47}
48
Greg Clayton43490d12010-07-30 20:12:55 +000049void
50SBDebugger::Clear ()
51{
52 m_opaque_sp.reset();
53}
54
Greg Clayton63094e02010-06-23 01:19:29 +000055SBDebugger
56SBDebugger::Create()
57{
58 SBDebugger debugger;
59 debugger.reset(Debugger::CreateInstance());
60 return debugger;
61}
62
Greg Clayton63094e02010-06-23 01:19:29 +000063SBDebugger::SBDebugger () :
64 m_opaque_sp ()
65{
66}
67
68SBDebugger::~SBDebugger ()
69{
70}
71
72bool
73SBDebugger::IsValid() const
74{
75 return m_opaque_sp.get() != NULL;
76}
77
78
Chris Lattner24943d22010-06-08 16:52:24 +000079void
80SBDebugger::SetAsync (bool b)
81{
Greg Clayton63094e02010-06-23 01:19:29 +000082 if (m_opaque_sp)
83 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +000084}
85
Greg Clayton887aa282010-10-11 01:05:37 +000086void
87SBDebugger::SkipLLDBInitFiles (bool b)
88{
89 if (m_opaque_sp)
90 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
91}
92
Chris Lattner24943d22010-06-08 16:52:24 +000093// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
94// trying to switch modes in the middle of a debugging session.
95void
96SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
97{
Greg Clayton63094e02010-06-23 01:19:29 +000098 if (m_opaque_sp)
99 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000100}
101
102void
103SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
104{
Greg Clayton63094e02010-06-23 01:19:29 +0000105 if (m_opaque_sp)
106 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000107}
108
109void
110SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
111{
Greg Clayton63094e02010-06-23 01:19:29 +0000112 if (m_opaque_sp)
113 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000114}
115
116FILE *
117SBDebugger::GetInputFileHandle ()
118{
Greg Clayton63094e02010-06-23 01:19:29 +0000119 if (m_opaque_sp)
120 return m_opaque_sp->GetInputFileHandle();
121 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000122}
123
124FILE *
125SBDebugger::GetOutputFileHandle ()
126{
Greg Clayton63094e02010-06-23 01:19:29 +0000127 if (m_opaque_sp)
128 return m_opaque_sp->GetOutputFileHandle();
129 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000130}
131
132FILE *
133SBDebugger::GetErrorFileHandle ()
134{
Greg Clayton63094e02010-06-23 01:19:29 +0000135 if (m_opaque_sp)
136 return m_opaque_sp->GetErrorFileHandle();
137 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000138}
139
140SBCommandInterpreter
141SBDebugger::GetCommandInterpreter ()
142{
Greg Clayton63094e02010-06-23 01:19:29 +0000143 SBCommandInterpreter sb_interpreter;
144 if (m_opaque_sp)
145 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Chris Lattner24943d22010-06-08 16:52:24 +0000146 return sb_interpreter;
147}
148
149void
150SBDebugger::HandleCommand (const char *command)
151{
Greg Clayton63094e02010-06-23 01:19:29 +0000152 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000153 {
Greg Clayton63094e02010-06-23 01:19:29 +0000154 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
155 SBCommandReturnObject result;
156
157 sb_interpreter.HandleCommand (command, result, false);
158
159 if (GetErrorFileHandle() != NULL)
160 result.PutError (GetErrorFileHandle());
161 if (GetOutputFileHandle() != NULL)
162 result.PutOutput (GetOutputFileHandle());
163
164 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000165 {
Greg Clayton63094e02010-06-23 01:19:29 +0000166 SBProcess process(GetCommandInterpreter().GetProcess ());
167 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000168 {
Greg Clayton63094e02010-06-23 01:19:29 +0000169 EventSP event_sp;
170 Listener &lldb_listener = m_opaque_sp->GetListener();
171 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
172 {
173 SBEvent event(event_sp);
174 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
175 }
Chris Lattner24943d22010-06-08 16:52:24 +0000176 }
177 }
178 }
179}
180
181SBListener
182SBDebugger::GetListener ()
183{
Greg Clayton63094e02010-06-23 01:19:29 +0000184 SBListener sb_listener;
185 if (m_opaque_sp)
186 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Chris Lattner24943d22010-06-08 16:52:24 +0000187 return sb_listener;
188}
189
190void
191SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
192{
193 const uint32_t event_type = event.GetType();
194 char stdio_buffer[1024];
195 size_t len;
196
197 if (event_type & Process::eBroadcastBitSTDOUT)
198 {
199 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
200 if (out != NULL)
201 ::fwrite (stdio_buffer, 1, len, out);
202 }
203 else if (event_type & Process::eBroadcastBitSTDERR)
204 {
205 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
206 if (out != NULL)
207 ::fwrite (stdio_buffer, 1, len, out);
208 }
209 else if (event_type & Process::eBroadcastBitStateChanged)
210 {
211 // Drain any stdout messages.
212 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
213 if (out != NULL)
214 ::fwrite (stdio_buffer, 1, len, out);
215
216 // Drain any stderr messages.
217 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
218 if (out != NULL)
219 ::fwrite (stdio_buffer, 1, len, out);
220
221 StateType event_state = SBProcess::GetStateFromEvent (event);
222
223 if (event_state == eStateInvalid)
224 return;
225
226 bool is_stopped = StateIsStoppedState (event_state);
227 if (!is_stopped)
Jim Inghamc8332952010-08-26 21:32:51 +0000228 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000229 }
230}
231
232void
Jim Inghamc8332952010-08-26 21:32:51 +0000233SBDebugger::UpdateSelectedThread (SBProcess &process)
Chris Lattner24943d22010-06-08 16:52:24 +0000234{
235 if (process.IsValid())
236 {
Jim Inghamc8332952010-08-26 21:32:51 +0000237 SBThread curr_thread = process.GetSelectedThread ();
Chris Lattner24943d22010-06-08 16:52:24 +0000238 SBThread thread;
239 StopReason curr_thread_stop_reason = eStopReasonInvalid;
240 if (curr_thread.IsValid())
241 {
242 if (curr_thread.GetStopReason() != eStopReasonInvalid)
243 curr_thread_stop_reason = curr_thread.GetStopReason ();
244 }
245
246 if (! curr_thread.IsValid()
247 || curr_thread_stop_reason == eStopReasonInvalid
248 || curr_thread_stop_reason == eStopReasonNone)
249 {
250 // Prefer a thread that has just completed its plan over another thread as current thread.
251 SBThread plan_thread;
252 SBThread other_thread;
253 const size_t num_threads = process.GetNumThreads ();
254 size_t i;
255 for (i = 0; i < num_threads; ++i)
256 {
257 thread = process.GetThreadAtIndex(i);
258 if (thread.GetStopReason () != eStopReasonInvalid)
259 {
260 switch (thread.GetStopReason ())
261 {
262 default:
263 case eStopReasonInvalid:
264 case eStopReasonNone:
265 break;
266
267 case eStopReasonTrace:
268 case eStopReasonBreakpoint:
269 case eStopReasonWatchpoint:
270 case eStopReasonSignal:
271 case eStopReasonException:
272 if (! other_thread.IsValid())
273 other_thread = thread;
274 break;
275 case eStopReasonPlanComplete:
276 if (! plan_thread.IsValid())
277 plan_thread = thread;
278 break;
279 }
280 }
281 }
282 if (plan_thread.IsValid())
Jim Inghamc8332952010-08-26 21:32:51 +0000283 process.SetSelectedThreadByID (plan_thread.GetThreadID());
Chris Lattner24943d22010-06-08 16:52:24 +0000284 else if (other_thread.IsValid())
Jim Inghamc8332952010-08-26 21:32:51 +0000285 process.SetSelectedThreadByID (other_thread.GetThreadID());
Chris Lattner24943d22010-06-08 16:52:24 +0000286 else
287 {
288 if (curr_thread.IsValid())
289 thread = curr_thread;
290 else
291 thread = process.GetThreadAtIndex(0);
292
293 if (thread.IsValid())
Jim Inghamc8332952010-08-26 21:32:51 +0000294 process.SetSelectedThreadByID (thread.GetThreadID());
Chris Lattner24943d22010-06-08 16:52:24 +0000295 }
296 }
297 }
298}
299
Chris Lattner24943d22010-06-08 16:52:24 +0000300SBSourceManager &
301SBDebugger::GetSourceManager ()
302{
303 static SourceManager g_lldb_source_manager;
304 static SBSourceManager g_sb_source_manager (g_lldb_source_manager);
305 return g_sb_source_manager;
306}
307
308
309bool
310SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
311{
312 if (arch_name && arch_name_len)
313 {
Caroline Tice5bc8c972010-09-20 20:44:43 +0000314 ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture ();
315
Chris Lattner24943d22010-06-08 16:52:24 +0000316 if (default_arch.IsValid())
317 {
318 ::snprintf (arch_name, arch_name_len, "%s", default_arch.AsCString());
319 return true;
320 }
321 }
322 if (arch_name && arch_name_len)
323 arch_name[0] = '\0';
324 return false;
325}
326
327
328bool
329SBDebugger::SetDefaultArchitecture (const char *arch_name)
330{
331 if (arch_name)
332 {
333 ArchSpec arch (arch_name);
334 if (arch.IsValid())
335 {
Caroline Tice5bc8c972010-09-20 20:44:43 +0000336 lldb_private::Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000337 return true;
338 }
339 }
340 return false;
341}
342
343ScriptLanguage
344SBDebugger::GetScriptingLanguage (const char *script_language_name)
345{
346 return Args::StringToScriptLanguage (script_language_name,
347 eScriptLanguageDefault,
348 NULL);
349}
Chris Lattner24943d22010-06-08 16:52:24 +0000350
351const char *
352SBDebugger::GetVersionString ()
353{
354 return lldb_private::GetVersion();
355}
356
357const char *
358SBDebugger::StateAsCString (lldb::StateType state)
359{
360 return lldb_private::StateAsCString (state);
361}
362
363bool
364SBDebugger::StateIsRunningState (lldb::StateType state)
365{
366 return lldb_private::StateIsRunningState (state);
367}
368
369bool
370SBDebugger::StateIsStoppedState (lldb::StateType state)
371{
372 return lldb_private::StateIsStoppedState (state);
373}
374
375
376SBTarget
377SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
378 const char *target_triple)
379{
Greg Clayton63094e02010-06-23 01:19:29 +0000380 SBTarget target;
381 if (m_opaque_sp)
382 {
383 ArchSpec arch;
384 FileSpec file_spec (filename);
385 arch.SetArchFromTargetTriple(target_triple);
386 TargetSP target_sp;
387 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, NULL, true, target_sp));
388 target.reset (target_sp);
389 }
Chris Lattner24943d22010-06-08 16:52:24 +0000390 return target;
391}
392
393SBTarget
394SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *archname)
395{
Greg Clayton63094e02010-06-23 01:19:29 +0000396 SBTarget target;
397 if (m_opaque_sp)
398 {
399 FileSpec file (filename);
Caroline Tice5bc8c972010-09-20 20:44:43 +0000400 ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000401 TargetSP target_sp;
402 Error error;
Chris Lattner24943d22010-06-08 16:52:24 +0000403
Greg Clayton63094e02010-06-23 01:19:29 +0000404 if (archname != NULL)
405 {
406 ArchSpec arch2 (archname);
407 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch2, NULL, true, target_sp);
408 }
409 else
410 {
411 if (!arch.IsValid())
412 arch = LLDB_ARCH_DEFAULT;
413
414 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
415
416 if (error.Fail())
417 {
418 if (arch == LLDB_ARCH_DEFAULT_32BIT)
419 arch = LLDB_ARCH_DEFAULT_64BIT;
420 else
421 arch = LLDB_ARCH_DEFAULT_32BIT;
422
423 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
424 }
425 }
426
427 if (error.Success())
428 {
Jim Inghamc8332952010-08-26 21:32:51 +0000429 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000430 target.reset(target_sp);
431 }
Chris Lattner24943d22010-06-08 16:52:24 +0000432 }
Greg Clayton63094e02010-06-23 01:19:29 +0000433 return target;
434}
435
436SBTarget
437SBDebugger::CreateTarget (const char *filename)
438{
439 SBTarget target;
440 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000441 {
Greg Clayton63094e02010-06-23 01:19:29 +0000442 FileSpec file (filename);
Caroline Tice5bc8c972010-09-20 20:44:43 +0000443 ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000444 TargetSP target_sp;
445 Error error;
446
Chris Lattner24943d22010-06-08 16:52:24 +0000447 if (!arch.IsValid())
448 arch = LLDB_ARCH_DEFAULT;
449
Greg Clayton63094e02010-06-23 01:19:29 +0000450 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000451
452 if (error.Fail())
453 {
454 if (arch == LLDB_ARCH_DEFAULT_32BIT)
455 arch = LLDB_ARCH_DEFAULT_64BIT;
456 else
457 arch = LLDB_ARCH_DEFAULT_32BIT;
458
Greg Clayton63094e02010-06-23 01:19:29 +0000459 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
460 }
461
462 if (error.Success())
463 {
Jim Inghamc8332952010-08-26 21:32:51 +0000464 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000465 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000466 }
467 }
Greg Clayton63094e02010-06-23 01:19:29 +0000468 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000469}
470
471SBTarget
472SBDebugger::GetTargetAtIndex (uint32_t idx)
473{
Greg Clayton63094e02010-06-23 01:19:29 +0000474 SBTarget sb_target;
475 if (m_opaque_sp)
476 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Chris Lattner24943d22010-06-08 16:52:24 +0000477 return sb_target;
478}
479
480SBTarget
481SBDebugger::FindTargetWithProcessID (pid_t pid)
482{
Greg Clayton63094e02010-06-23 01:19:29 +0000483 SBTarget sb_target;
484 if (m_opaque_sp)
485 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Chris Lattner24943d22010-06-08 16:52:24 +0000486 return sb_target;
487}
488
489SBTarget
490SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
491{
Greg Clayton63094e02010-06-23 01:19:29 +0000492 SBTarget sb_target;
493 if (m_opaque_sp && filename && filename[0])
494 {
495 ArchSpec arch;
496 if (arch_name)
497 arch.SetArch(arch_name);
498 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename), arch_name ? &arch : NULL));
499 sb_target.reset(target_sp);
500 }
501 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000502}
503
504SBTarget
505SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp)
506{
Greg Clayton63094e02010-06-23 01:19:29 +0000507 SBTarget sb_target;
508 if (m_opaque_sp)
509 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Chris Lattner24943d22010-06-08 16:52:24 +0000510 return sb_target;
511}
512
513
514uint32_t
515SBDebugger::GetNumTargets ()
516{
Greg Clayton63094e02010-06-23 01:19:29 +0000517 if (m_opaque_sp)
518 return m_opaque_sp->GetTargetList().GetNumTargets ();
519 return 0;
520}
Chris Lattner24943d22010-06-08 16:52:24 +0000521
522SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000523SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000524{
Greg Clayton63094e02010-06-23 01:19:29 +0000525 SBTarget sb_target;
526 if (m_opaque_sp)
Jim Inghamc8332952010-08-26 21:32:51 +0000527 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Chris Lattner24943d22010-06-08 16:52:24 +0000528 return sb_target;
529}
530
531void
532SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
533{
Greg Clayton63094e02010-06-23 01:19:29 +0000534 if (m_opaque_sp)
535 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000536}
537
538void
539SBDebugger::PushInputReader (SBInputReader &reader)
540{
Greg Clayton63094e02010-06-23 01:19:29 +0000541 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000542 {
543 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000544 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000545 }
546}
Greg Clayton63094e02010-06-23 01:19:29 +0000547
548void
549SBDebugger::reset (const lldb::DebuggerSP &debugger_sp)
550{
551 m_opaque_sp = debugger_sp;
552}
553
554Debugger *
555SBDebugger::get () const
556{
557 return m_opaque_sp.get();
558}
559
560Debugger &
561SBDebugger::ref () const
562{
563 assert (m_opaque_sp.get());
564 return *m_opaque_sp;
565}
566
567
Caroline Tice558be582010-06-30 16:22:25 +0000568SBDebugger
569SBDebugger::FindDebuggerWithID (int id)
570{
571 SBDebugger sb_debugger;
572 lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
573 if (debugger_sp)
574 sb_debugger.reset (debugger_sp);
575 return sb_debugger;
576}
Jim Ingham74989e82010-08-30 19:44:40 +0000577
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000578const char *
579SBDebugger::GetInstanceName()
580{
581 if (m_opaque_sp)
582 return m_opaque_sp->GetInstanceName().AsCString();
583 else
584 return NULL;
585}
586
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000587SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000588SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000589{
590 lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000591
Caroline Tice1ebef442010-09-27 00:30:10 +0000592 Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000593 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000594 SBError sb_error;
595 sb_error.SetError (err);
596
597 return sb_error;
598}
599
600lldb::SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000601SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000602{
603 SBStringList ret_value;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000604 lldb::SettableVariableType var_type;
Caroline Tice5bc8c972010-09-20 20:44:43 +0000605 lldb_private:Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000606
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000607 lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
608
Caroline Tice5bc8c972010-09-20 20:44:43 +0000609 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
610
611 if (err.Success())
612 {
613 for (unsigned i = 0; i != value.GetSize(); ++i)
614 ret_value.AppendString (value.GetStringAtIndex(i));
615 }
616 else
617 {
618 ret_value.AppendString (err.AsCString());
619 }
620
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000621
622 return ret_value;
623}
624
Greg Clayton238c0a12010-09-18 01:14:36 +0000625uint32_t
626SBDebugger::GetTerminalWidth () const
627{
628 if (m_opaque_sp)
629 return m_opaque_sp->GetTerminalWidth ();
630 return 0;
631}
632
633void
634SBDebugger::SetTerminalWidth (uint32_t term_width)
635{
636 if (m_opaque_sp)
637 m_opaque_sp->SetTerminalWidth (term_width);
638}
639
640const char *
641SBDebugger::GetPrompt() const
642{
643 if (m_opaque_sp)
644 return m_opaque_sp->GetPrompt ();
645 return 0;
646}
647
648void
649SBDebugger::SetPrompt (const char *prompt)
650{
651 if (m_opaque_sp)
652 m_opaque_sp->SetPrompt (prompt);
653}
654
655
656lldb::ScriptLanguage
657SBDebugger::GetScriptLanguage() const
658{
659 if (m_opaque_sp)
660 return m_opaque_sp->GetScriptLanguage ();
661 return eScriptLanguageNone;
662}
663
664void
665SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang)
666{
667 if (m_opaque_sp)
668 m_opaque_sp->SetScriptLanguage (script_lang);
669}
670
671
672
673
Jim Ingham74989e82010-08-30 19:44:40 +0000674bool
675SBDebugger::SetUseExternalEditor (bool value)
676{
677 if (m_opaque_sp)
678 return m_opaque_sp->SetUseExternalEditor (value);
679 else
680 return false;
681}
682
683bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000684SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000685{
686 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000687 return m_opaque_sp->GetUseExternalEditor ();
Jim Ingham74989e82010-08-30 19:44:40 +0000688 else
689 return false;
690}
691
Caroline Tice98f930f2010-09-20 05:20:02 +0000692bool
693SBDebugger::GetDescription (SBStream &description)
694{
695 if (m_opaque_sp)
696 {
697 const char *name = m_opaque_sp->GetInstanceName().AsCString();
698 lldb::user_id_t id = m_opaque_sp->GetID();
699 description.Printf ("Debugger (instance: '%s', id: %d)", name, id);
700 }
701 else
702 description.Printf ("No value");
703
704 return true;
705}