130fdc8d8SChris Lattner //===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
10ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h"
1130fdc8d8SChris Lattner 
1230fdc8d8SChris Lattner #include "lldb/lldb-include.h"
1330fdc8d8SChris Lattner 
14ca93cc1dSEli Friedman #include "lldb/API/SBListener.h"
15ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
16ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h"
17ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
18ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
19ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
20ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h"
213df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
223df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
23dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
243df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
253df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
276eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
286eee5aa0SGreg Clayton #include "lldb/Core/State.h"
296eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h"
306eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
316eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
326eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
3330fdc8d8SChris Lattner 
3430fdc8d8SChris Lattner using namespace lldb;
3530fdc8d8SChris Lattner using namespace lldb_private;
3630fdc8d8SChris Lattner 
3730fdc8d8SChris Lattner void
3830fdc8d8SChris Lattner SBDebugger::Initialize ()
3930fdc8d8SChris Lattner {
40*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
41ceb6b139SCaroline Tice 
42ceb6b139SCaroline Tice     if (log)
43ceb6b139SCaroline Tice         log->Printf ("SBDebugger::Initialize ()");
44ceb6b139SCaroline Tice 
4530fdc8d8SChris Lattner     Debugger::Initialize();
4630fdc8d8SChris Lattner }
4730fdc8d8SChris Lattner 
4830fdc8d8SChris Lattner void
4930fdc8d8SChris Lattner SBDebugger::Terminate ()
5030fdc8d8SChris Lattner {
5130fdc8d8SChris Lattner     Debugger::Terminate();
5230fdc8d8SChris Lattner }
5330fdc8d8SChris Lattner 
5448e42549SGreg Clayton void
5548e42549SGreg Clayton SBDebugger::Clear ()
5648e42549SGreg Clayton {
57*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
58ceb6b139SCaroline Tice 
59ceb6b139SCaroline Tice     if (log)
6093aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
61ceb6b139SCaroline Tice 
6248e42549SGreg Clayton     m_opaque_sp.reset();
6348e42549SGreg Clayton }
6448e42549SGreg Clayton 
656611103cSGreg Clayton SBDebugger
666611103cSGreg Clayton SBDebugger::Create()
676611103cSGreg Clayton {
68*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
69ceb6b139SCaroline Tice 
706611103cSGreg Clayton     SBDebugger debugger;
716611103cSGreg Clayton     debugger.reset(Debugger::CreateInstance());
72ceb6b139SCaroline Tice 
73ceb6b139SCaroline Tice     if (log)
74ceb6b139SCaroline Tice     {
75ceb6b139SCaroline Tice         SBStream sstr;
76ceb6b139SCaroline Tice         debugger.GetDescription (sstr);
7793aa84e8SGreg Clayton         log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
78ceb6b139SCaroline Tice     }
79ceb6b139SCaroline Tice 
806611103cSGreg Clayton     return debugger;
816611103cSGreg Clayton }
826611103cSGreg Clayton 
836611103cSGreg Clayton SBDebugger::SBDebugger () :
846611103cSGreg Clayton     m_opaque_sp ()
856611103cSGreg Clayton {
866611103cSGreg Clayton }
876611103cSGreg Clayton 
88efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) :
89efabb123SGreg Clayton     m_opaque_sp (rhs.m_opaque_sp)
90efabb123SGreg Clayton {
91efabb123SGreg Clayton }
92efabb123SGreg Clayton 
93efabb123SGreg Clayton SBDebugger &
94efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs)
95efabb123SGreg Clayton {
96efabb123SGreg Clayton     if (this != &rhs)
97efabb123SGreg Clayton     {
98efabb123SGreg Clayton         m_opaque_sp = rhs.m_opaque_sp;
99efabb123SGreg Clayton     }
100efabb123SGreg Clayton     return *this;
101efabb123SGreg Clayton }
102efabb123SGreg Clayton 
1036611103cSGreg Clayton SBDebugger::~SBDebugger ()
1046611103cSGreg Clayton {
1056611103cSGreg Clayton }
1066611103cSGreg Clayton 
1076611103cSGreg Clayton bool
1086611103cSGreg Clayton SBDebugger::IsValid() const
1096611103cSGreg Clayton {
1106611103cSGreg Clayton     return m_opaque_sp.get() != NULL;
1116611103cSGreg Clayton }
1126611103cSGreg Clayton 
1136611103cSGreg Clayton 
11430fdc8d8SChris Lattner void
11530fdc8d8SChris Lattner SBDebugger::SetAsync (bool b)
11630fdc8d8SChris Lattner {
1176611103cSGreg Clayton     if (m_opaque_sp)
1186611103cSGreg Clayton         m_opaque_sp->SetAsyncExecution(b);
11930fdc8d8SChris Lattner }
12030fdc8d8SChris Lattner 
1216eee5aa0SGreg Clayton void
1226eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b)
1236eee5aa0SGreg Clayton {
1246eee5aa0SGreg Clayton     if (m_opaque_sp)
1256eee5aa0SGreg Clayton         m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
1266eee5aa0SGreg Clayton }
1276eee5aa0SGreg Clayton 
12830fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
12930fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session.
13030fdc8d8SChris Lattner void
13130fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
13230fdc8d8SChris Lattner {
133*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
134ceb6b139SCaroline Tice 
135ceb6b139SCaroline Tice     if (log)
136cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
137cfd1acedSGreg Clayton                      fh, transfer_ownership);
138ceb6b139SCaroline Tice 
1396611103cSGreg Clayton     if (m_opaque_sp)
1406611103cSGreg Clayton         m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
14130fdc8d8SChris Lattner }
14230fdc8d8SChris Lattner 
14330fdc8d8SChris Lattner void
14430fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
14530fdc8d8SChris Lattner {
146*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
147ceb6b139SCaroline Tice 
148ceb6b139SCaroline Tice 
149ceb6b139SCaroline Tice     if (log)
150cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
151cfd1acedSGreg Clayton                      fh, transfer_ownership);
152ceb6b139SCaroline Tice 
1536611103cSGreg Clayton     if (m_opaque_sp)
1546611103cSGreg Clayton         m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
15530fdc8d8SChris Lattner }
15630fdc8d8SChris Lattner 
15730fdc8d8SChris Lattner void
15830fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
15930fdc8d8SChris Lattner {
160*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
161ceb6b139SCaroline Tice 
162ceb6b139SCaroline Tice 
163ceb6b139SCaroline Tice     if (log)
164cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
165cfd1acedSGreg Clayton                      fh, transfer_ownership);
166ceb6b139SCaroline Tice 
1676611103cSGreg Clayton     if (m_opaque_sp)
1686611103cSGreg Clayton         m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
16930fdc8d8SChris Lattner }
17030fdc8d8SChris Lattner 
17130fdc8d8SChris Lattner FILE *
17230fdc8d8SChris Lattner SBDebugger::GetInputFileHandle ()
17330fdc8d8SChris Lattner {
1746611103cSGreg Clayton     if (m_opaque_sp)
1756611103cSGreg Clayton         return m_opaque_sp->GetInputFileHandle();
1766611103cSGreg Clayton     return NULL;
17730fdc8d8SChris Lattner }
17830fdc8d8SChris Lattner 
17930fdc8d8SChris Lattner FILE *
18030fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle ()
18130fdc8d8SChris Lattner {
1826611103cSGreg Clayton     if (m_opaque_sp)
1836611103cSGreg Clayton         return m_opaque_sp->GetOutputFileHandle();
1846611103cSGreg Clayton     return NULL;
18530fdc8d8SChris Lattner }
18630fdc8d8SChris Lattner 
18730fdc8d8SChris Lattner FILE *
18830fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle ()
18930fdc8d8SChris Lattner {
1906611103cSGreg Clayton     if (m_opaque_sp)
1916611103cSGreg Clayton         return m_opaque_sp->GetErrorFileHandle();
1926611103cSGreg Clayton     return NULL;
19330fdc8d8SChris Lattner }
19430fdc8d8SChris Lattner 
19530fdc8d8SChris Lattner SBCommandInterpreter
19630fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter ()
19730fdc8d8SChris Lattner {
198*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
199ceb6b139SCaroline Tice 
2006611103cSGreg Clayton     SBCommandInterpreter sb_interpreter;
2016611103cSGreg Clayton     if (m_opaque_sp)
2026611103cSGreg Clayton         sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
203ceb6b139SCaroline Tice 
204750cd175SCaroline Tice     if (log)
20593aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
206750cd175SCaroline Tice                      m_opaque_sp.get(), sb_interpreter.get());
207750cd175SCaroline Tice 
20830fdc8d8SChris Lattner     return sb_interpreter;
20930fdc8d8SChris Lattner }
21030fdc8d8SChris Lattner 
21130fdc8d8SChris Lattner void
21230fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command)
21330fdc8d8SChris Lattner {
2146611103cSGreg Clayton     if (m_opaque_sp)
2156611103cSGreg Clayton     {
2166611103cSGreg Clayton         SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
21730fdc8d8SChris Lattner         SBCommandReturnObject result;
21830fdc8d8SChris Lattner 
21930fdc8d8SChris Lattner         sb_interpreter.HandleCommand (command, result, false);
22030fdc8d8SChris Lattner 
22130fdc8d8SChris Lattner         if (GetErrorFileHandle() != NULL)
22230fdc8d8SChris Lattner             result.PutError (GetErrorFileHandle());
22330fdc8d8SChris Lattner         if (GetOutputFileHandle() != NULL)
22430fdc8d8SChris Lattner             result.PutOutput (GetOutputFileHandle());
22530fdc8d8SChris Lattner 
2266611103cSGreg Clayton         if (m_opaque_sp->GetAsyncExecution() == false)
22730fdc8d8SChris Lattner         {
2286611103cSGreg Clayton             SBProcess process(GetCommandInterpreter().GetProcess ());
22930fdc8d8SChris Lattner             if (process.IsValid())
23030fdc8d8SChris Lattner             {
23130fdc8d8SChris Lattner                 EventSP event_sp;
2326611103cSGreg Clayton                 Listener &lldb_listener = m_opaque_sp->GetListener();
23330fdc8d8SChris Lattner                 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
23430fdc8d8SChris Lattner                 {
23530fdc8d8SChris Lattner                     SBEvent event(event_sp);
23630fdc8d8SChris Lattner                     HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
23730fdc8d8SChris Lattner                 }
23830fdc8d8SChris Lattner             }
23930fdc8d8SChris Lattner         }
24030fdc8d8SChris Lattner     }
2416611103cSGreg Clayton }
24230fdc8d8SChris Lattner 
24330fdc8d8SChris Lattner SBListener
24430fdc8d8SChris Lattner SBDebugger::GetListener ()
24530fdc8d8SChris Lattner {
246*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
247ceb6b139SCaroline Tice 
2486611103cSGreg Clayton     SBListener sb_listener;
2496611103cSGreg Clayton     if (m_opaque_sp)
2506611103cSGreg Clayton         sb_listener.reset(&m_opaque_sp->GetListener(), false);
251ceb6b139SCaroline Tice 
252750cd175SCaroline Tice     if (log)
25393aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
254750cd175SCaroline Tice                      sb_listener.get());
255750cd175SCaroline Tice 
25630fdc8d8SChris Lattner     return sb_listener;
25730fdc8d8SChris Lattner }
25830fdc8d8SChris Lattner 
25930fdc8d8SChris Lattner void
26030fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
26130fdc8d8SChris Lattner {
26230fdc8d8SChris Lattner      const uint32_t event_type = event.GetType();
26330fdc8d8SChris Lattner      char stdio_buffer[1024];
26430fdc8d8SChris Lattner      size_t len;
26530fdc8d8SChris Lattner 
26630fdc8d8SChris Lattner      if (event_type & Process::eBroadcastBitSTDOUT)
26730fdc8d8SChris Lattner      {
26830fdc8d8SChris Lattner          while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
26930fdc8d8SChris Lattner              if (out != NULL)
27030fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
27130fdc8d8SChris Lattner      }
27230fdc8d8SChris Lattner      else if (event_type & Process::eBroadcastBitSTDERR)
27330fdc8d8SChris Lattner      {
27430fdc8d8SChris Lattner          while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
27530fdc8d8SChris Lattner              if (out != NULL)
27630fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
27730fdc8d8SChris Lattner      }
27830fdc8d8SChris Lattner      else if (event_type & Process::eBroadcastBitStateChanged)
27930fdc8d8SChris Lattner      {
28030fdc8d8SChris Lattner          // Drain any stdout messages.
28130fdc8d8SChris Lattner          while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
28230fdc8d8SChris Lattner              if (out != NULL)
28330fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
28430fdc8d8SChris Lattner 
28530fdc8d8SChris Lattner          // Drain any stderr messages.
28630fdc8d8SChris Lattner          while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
28730fdc8d8SChris Lattner              if (out != NULL)
28830fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
28930fdc8d8SChris Lattner 
29030fdc8d8SChris Lattner          StateType event_state = SBProcess::GetStateFromEvent (event);
29130fdc8d8SChris Lattner 
29230fdc8d8SChris Lattner          if (event_state == eStateInvalid)
29330fdc8d8SChris Lattner              return;
29430fdc8d8SChris Lattner 
29530fdc8d8SChris Lattner          bool is_stopped = StateIsStoppedState (event_state);
29630fdc8d8SChris Lattner          if (!is_stopped)
2972976d00aSJim Ingham              process.ReportEventState (event, out);
29830fdc8d8SChris Lattner    }
29930fdc8d8SChris Lattner }
30030fdc8d8SChris Lattner 
30130fdc8d8SChris Lattner void
3022976d00aSJim Ingham SBDebugger::UpdateSelectedThread (SBProcess &process)
30330fdc8d8SChris Lattner {
30430fdc8d8SChris Lattner     if (process.IsValid())
30530fdc8d8SChris Lattner     {
3062976d00aSJim Ingham         SBThread curr_thread = process.GetSelectedThread ();
30730fdc8d8SChris Lattner         SBThread thread;
30830fdc8d8SChris Lattner         StopReason curr_thread_stop_reason = eStopReasonInvalid;
30930fdc8d8SChris Lattner         if (curr_thread.IsValid())
31030fdc8d8SChris Lattner         {
31130fdc8d8SChris Lattner             if (curr_thread.GetStopReason() != eStopReasonInvalid)
31230fdc8d8SChris Lattner                 curr_thread_stop_reason = curr_thread.GetStopReason ();
31330fdc8d8SChris Lattner         }
31430fdc8d8SChris Lattner 
31530fdc8d8SChris Lattner         if (! curr_thread.IsValid()
31630fdc8d8SChris Lattner             || curr_thread_stop_reason == eStopReasonInvalid
31730fdc8d8SChris Lattner             || curr_thread_stop_reason == eStopReasonNone)
31830fdc8d8SChris Lattner           {
31930fdc8d8SChris Lattner             // Prefer a thread that has just completed its plan over another thread as current thread.
32030fdc8d8SChris Lattner             SBThread plan_thread;
32130fdc8d8SChris Lattner             SBThread other_thread;
32230fdc8d8SChris Lattner             const size_t num_threads = process.GetNumThreads ();
32330fdc8d8SChris Lattner             size_t i;
32430fdc8d8SChris Lattner             for (i = 0; i < num_threads; ++i)
32530fdc8d8SChris Lattner             {
32630fdc8d8SChris Lattner                 thread = process.GetThreadAtIndex(i);
32730fdc8d8SChris Lattner                 if (thread.GetStopReason () != eStopReasonInvalid)
32830fdc8d8SChris Lattner                 {
32930fdc8d8SChris Lattner                     switch (thread.GetStopReason ())
33030fdc8d8SChris Lattner                     {
33130fdc8d8SChris Lattner                         default:
33230fdc8d8SChris Lattner                         case eStopReasonInvalid:
33330fdc8d8SChris Lattner                         case eStopReasonNone:
33430fdc8d8SChris Lattner                             break;
33530fdc8d8SChris Lattner 
33630fdc8d8SChris Lattner                         case eStopReasonTrace:
33730fdc8d8SChris Lattner                         case eStopReasonBreakpoint:
33830fdc8d8SChris Lattner                         case eStopReasonWatchpoint:
33930fdc8d8SChris Lattner                         case eStopReasonSignal:
34030fdc8d8SChris Lattner                         case eStopReasonException:
34130fdc8d8SChris Lattner                             if (! other_thread.IsValid())
34230fdc8d8SChris Lattner                                 other_thread = thread;
34330fdc8d8SChris Lattner                             break;
34430fdc8d8SChris Lattner                         case eStopReasonPlanComplete:
34530fdc8d8SChris Lattner                             if (! plan_thread.IsValid())
34630fdc8d8SChris Lattner                                 plan_thread = thread;
34730fdc8d8SChris Lattner                             break;
34830fdc8d8SChris Lattner                     }
34930fdc8d8SChris Lattner                 }
35030fdc8d8SChris Lattner             }
35130fdc8d8SChris Lattner             if (plan_thread.IsValid())
3522976d00aSJim Ingham                 process.SetSelectedThreadByID (plan_thread.GetThreadID());
35330fdc8d8SChris Lattner             else if (other_thread.IsValid())
3542976d00aSJim Ingham                 process.SetSelectedThreadByID (other_thread.GetThreadID());
35530fdc8d8SChris Lattner             else
35630fdc8d8SChris Lattner             {
35730fdc8d8SChris Lattner                 if (curr_thread.IsValid())
35830fdc8d8SChris Lattner                     thread = curr_thread;
35930fdc8d8SChris Lattner                 else
36030fdc8d8SChris Lattner                     thread = process.GetThreadAtIndex(0);
36130fdc8d8SChris Lattner 
36230fdc8d8SChris Lattner                 if (thread.IsValid())
3632976d00aSJim Ingham                     process.SetSelectedThreadByID (thread.GetThreadID());
36430fdc8d8SChris Lattner             }
36530fdc8d8SChris Lattner         }
36630fdc8d8SChris Lattner     }
36730fdc8d8SChris Lattner }
36830fdc8d8SChris Lattner 
36930fdc8d8SChris Lattner SBSourceManager &
37030fdc8d8SChris Lattner SBDebugger::GetSourceManager ()
37130fdc8d8SChris Lattner {
37230fdc8d8SChris Lattner     static SourceManager g_lldb_source_manager;
373efabb123SGreg Clayton     static SBSourceManager g_sb_source_manager (&g_lldb_source_manager);
37430fdc8d8SChris Lattner     return g_sb_source_manager;
37530fdc8d8SChris Lattner }
37630fdc8d8SChris Lattner 
37730fdc8d8SChris Lattner 
37830fdc8d8SChris Lattner bool
37930fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
38030fdc8d8SChris Lattner {
38130fdc8d8SChris Lattner     if (arch_name && arch_name_len)
38230fdc8d8SChris Lattner     {
383daccaa9eSCaroline Tice         ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture ();
384daccaa9eSCaroline Tice 
38530fdc8d8SChris Lattner         if (default_arch.IsValid())
38630fdc8d8SChris Lattner         {
38730fdc8d8SChris Lattner             ::snprintf (arch_name, arch_name_len, "%s", default_arch.AsCString());
38830fdc8d8SChris Lattner             return true;
38930fdc8d8SChris Lattner         }
39030fdc8d8SChris Lattner     }
39130fdc8d8SChris Lattner     if (arch_name && arch_name_len)
39230fdc8d8SChris Lattner         arch_name[0] = '\0';
39330fdc8d8SChris Lattner     return false;
39430fdc8d8SChris Lattner }
39530fdc8d8SChris Lattner 
39630fdc8d8SChris Lattner 
39730fdc8d8SChris Lattner bool
39830fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name)
39930fdc8d8SChris Lattner {
40030fdc8d8SChris Lattner     if (arch_name)
40130fdc8d8SChris Lattner     {
40230fdc8d8SChris Lattner         ArchSpec arch (arch_name);
40330fdc8d8SChris Lattner         if (arch.IsValid())
40430fdc8d8SChris Lattner         {
405daccaa9eSCaroline Tice             lldb_private::Target::SetDefaultArchitecture (arch);
40630fdc8d8SChris Lattner             return true;
40730fdc8d8SChris Lattner         }
40830fdc8d8SChris Lattner     }
40930fdc8d8SChris Lattner     return false;
41030fdc8d8SChris Lattner }
41130fdc8d8SChris Lattner 
41230fdc8d8SChris Lattner ScriptLanguage
41330fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name)
41430fdc8d8SChris Lattner {
41530fdc8d8SChris Lattner     return Args::StringToScriptLanguage (script_language_name,
41630fdc8d8SChris Lattner                                          eScriptLanguageDefault,
41730fdc8d8SChris Lattner                                          NULL);
41830fdc8d8SChris Lattner }
41930fdc8d8SChris Lattner 
42030fdc8d8SChris Lattner const char *
42130fdc8d8SChris Lattner SBDebugger::GetVersionString ()
42230fdc8d8SChris Lattner {
42330fdc8d8SChris Lattner     return lldb_private::GetVersion();
42430fdc8d8SChris Lattner }
42530fdc8d8SChris Lattner 
42630fdc8d8SChris Lattner const char *
42730fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state)
42830fdc8d8SChris Lattner {
42930fdc8d8SChris Lattner     return lldb_private::StateAsCString (state);
43030fdc8d8SChris Lattner }
43130fdc8d8SChris Lattner 
43230fdc8d8SChris Lattner bool
43330fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state)
43430fdc8d8SChris Lattner {
435*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4364838131bSGreg Clayton 
4374838131bSGreg Clayton     const bool result = lldb_private::StateIsRunningState (state);
4384838131bSGreg Clayton     if (log)
4394838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
4404838131bSGreg Clayton                      lldb_private::StateAsCString (state), result);
4414838131bSGreg Clayton 
4424838131bSGreg Clayton     return result;
44330fdc8d8SChris Lattner }
44430fdc8d8SChris Lattner 
44530fdc8d8SChris Lattner bool
44630fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state)
44730fdc8d8SChris Lattner {
448*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
449ceb6b139SCaroline Tice 
4504838131bSGreg Clayton     const bool result = lldb_private::StateIsStoppedState (state);
451ceb6b139SCaroline Tice     if (log)
4524838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
4534838131bSGreg Clayton                      lldb_private::StateAsCString (state), result);
454ceb6b139SCaroline Tice 
4554838131bSGreg Clayton     return result;
45630fdc8d8SChris Lattner }
45730fdc8d8SChris Lattner 
45830fdc8d8SChris Lattner 
45930fdc8d8SChris Lattner SBTarget
46030fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
46130fdc8d8SChris Lattner                                                  const char *target_triple)
46230fdc8d8SChris Lattner {
4636611103cSGreg Clayton     SBTarget target;
4646611103cSGreg Clayton     if (m_opaque_sp)
4656611103cSGreg Clayton     {
46630fdc8d8SChris Lattner         ArchSpec arch;
467274060b6SGreg Clayton         FileSpec file_spec (filename, true);
46830fdc8d8SChris Lattner         arch.SetArchFromTargetTriple(target_triple);
46930fdc8d8SChris Lattner         TargetSP target_sp;
4706611103cSGreg Clayton         Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, NULL, true, target_sp));
4716611103cSGreg Clayton         target.reset (target_sp);
4726611103cSGreg Clayton     }
4734838131bSGreg Clayton 
474*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4754838131bSGreg Clayton     if (log)
4764838131bSGreg Clayton     {
477cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
4784838131bSGreg Clayton                      m_opaque_sp.get(), filename, target_triple, target.get());
4794838131bSGreg Clayton     }
4804838131bSGreg Clayton 
48130fdc8d8SChris Lattner     return target;
48230fdc8d8SChris Lattner }
48330fdc8d8SChris Lattner 
48430fdc8d8SChris Lattner SBTarget
48530fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *archname)
48630fdc8d8SChris Lattner {
487*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
488ceb6b139SCaroline Tice 
4896611103cSGreg Clayton     SBTarget target;
4906611103cSGreg Clayton     if (m_opaque_sp)
4916611103cSGreg Clayton     {
492274060b6SGreg Clayton         FileSpec file (filename, true);
493daccaa9eSCaroline Tice         ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
49430fdc8d8SChris Lattner         TargetSP target_sp;
49530fdc8d8SChris Lattner         Error error;
49630fdc8d8SChris Lattner 
49730fdc8d8SChris Lattner         if (archname != NULL)
49830fdc8d8SChris Lattner         {
49930fdc8d8SChris Lattner             ArchSpec arch2 (archname);
5006611103cSGreg Clayton             error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch2, NULL, true, target_sp);
50130fdc8d8SChris Lattner         }
50230fdc8d8SChris Lattner         else
50330fdc8d8SChris Lattner         {
50430fdc8d8SChris Lattner             if (!arch.IsValid())
50530fdc8d8SChris Lattner                 arch = LLDB_ARCH_DEFAULT;
50630fdc8d8SChris Lattner 
5076611103cSGreg Clayton             error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
50830fdc8d8SChris Lattner 
50930fdc8d8SChris Lattner             if (error.Fail())
51030fdc8d8SChris Lattner             {
51130fdc8d8SChris Lattner                 if (arch == LLDB_ARCH_DEFAULT_32BIT)
51230fdc8d8SChris Lattner                     arch = LLDB_ARCH_DEFAULT_64BIT;
51330fdc8d8SChris Lattner                 else
51430fdc8d8SChris Lattner                     arch = LLDB_ARCH_DEFAULT_32BIT;
51530fdc8d8SChris Lattner 
5166611103cSGreg Clayton                 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
51730fdc8d8SChris Lattner             }
51830fdc8d8SChris Lattner         }
51930fdc8d8SChris Lattner 
52030fdc8d8SChris Lattner         if (error.Success())
5216611103cSGreg Clayton         {
5222976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
5236611103cSGreg Clayton             target.reset(target_sp);
5246611103cSGreg Clayton         }
5256611103cSGreg Clayton     }
526ceb6b139SCaroline Tice 
527ceb6b139SCaroline Tice     if (log)
528ceb6b139SCaroline Tice     {
529cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
5304838131bSGreg Clayton                      m_opaque_sp.get(), filename, archname, target.get());
531ceb6b139SCaroline Tice     }
532ceb6b139SCaroline Tice 
5336611103cSGreg Clayton     return target;
53430fdc8d8SChris Lattner }
53530fdc8d8SChris Lattner 
53630fdc8d8SChris Lattner SBTarget
53730fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename)
53830fdc8d8SChris Lattner {
5396611103cSGreg Clayton     SBTarget target;
5406611103cSGreg Clayton     if (m_opaque_sp)
5416611103cSGreg Clayton     {
542274060b6SGreg Clayton         FileSpec file (filename, true);
543daccaa9eSCaroline Tice         ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
54430fdc8d8SChris Lattner         TargetSP target_sp;
54530fdc8d8SChris Lattner         Error error;
54630fdc8d8SChris Lattner 
54730fdc8d8SChris Lattner         if (!arch.IsValid())
54830fdc8d8SChris Lattner             arch = LLDB_ARCH_DEFAULT;
54930fdc8d8SChris Lattner 
5506611103cSGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
55130fdc8d8SChris Lattner 
55230fdc8d8SChris Lattner         if (error.Fail())
55330fdc8d8SChris Lattner         {
55430fdc8d8SChris Lattner             if (arch == LLDB_ARCH_DEFAULT_32BIT)
55530fdc8d8SChris Lattner                 arch = LLDB_ARCH_DEFAULT_64BIT;
55630fdc8d8SChris Lattner             else
55730fdc8d8SChris Lattner                 arch = LLDB_ARCH_DEFAULT_32BIT;
55830fdc8d8SChris Lattner 
5596611103cSGreg Clayton             error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
56030fdc8d8SChris Lattner         }
56130fdc8d8SChris Lattner 
5626611103cSGreg Clayton         if (error.Success())
5636611103cSGreg Clayton         {
5642976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
5656611103cSGreg Clayton             target.reset (target_sp);
5666611103cSGreg Clayton         }
5676611103cSGreg Clayton     }
568*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5694838131bSGreg Clayton     if (log)
5704838131bSGreg Clayton     {
571cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
5724838131bSGreg Clayton                      m_opaque_sp.get(), filename, target.get());
5734838131bSGreg Clayton     }
5746611103cSGreg Clayton     return target;
57530fdc8d8SChris Lattner }
57630fdc8d8SChris Lattner 
57730fdc8d8SChris Lattner SBTarget
57830fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx)
57930fdc8d8SChris Lattner {
5806611103cSGreg Clayton     SBTarget sb_target;
5816611103cSGreg Clayton     if (m_opaque_sp)
5826611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
58330fdc8d8SChris Lattner     return sb_target;
58430fdc8d8SChris Lattner }
58530fdc8d8SChris Lattner 
58630fdc8d8SChris Lattner SBTarget
58730fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid)
58830fdc8d8SChris Lattner {
5896611103cSGreg Clayton     SBTarget sb_target;
5906611103cSGreg Clayton     if (m_opaque_sp)
5916611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
59230fdc8d8SChris Lattner     return sb_target;
59330fdc8d8SChris Lattner }
59430fdc8d8SChris Lattner 
59530fdc8d8SChris Lattner SBTarget
59630fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
59730fdc8d8SChris Lattner {
5986611103cSGreg Clayton     SBTarget sb_target;
5996611103cSGreg Clayton     if (m_opaque_sp && filename && filename[0])
6006611103cSGreg Clayton     {
60130fdc8d8SChris Lattner         ArchSpec arch;
60230fdc8d8SChris Lattner         if (arch_name)
60330fdc8d8SChris Lattner             arch.SetArch(arch_name);
604274060b6SGreg Clayton         TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
6056611103cSGreg Clayton         sb_target.reset(target_sp);
6066611103cSGreg Clayton     }
6076611103cSGreg Clayton     return sb_target;
60830fdc8d8SChris Lattner }
60930fdc8d8SChris Lattner 
61030fdc8d8SChris Lattner SBTarget
61130fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp)
61230fdc8d8SChris Lattner {
6136611103cSGreg Clayton     SBTarget sb_target;
6146611103cSGreg Clayton     if (m_opaque_sp)
6156611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
61630fdc8d8SChris Lattner     return sb_target;
61730fdc8d8SChris Lattner }
61830fdc8d8SChris Lattner 
61930fdc8d8SChris Lattner 
62030fdc8d8SChris Lattner uint32_t
62130fdc8d8SChris Lattner SBDebugger::GetNumTargets ()
62230fdc8d8SChris Lattner {
6236611103cSGreg Clayton     if (m_opaque_sp)
6246611103cSGreg Clayton         return m_opaque_sp->GetTargetList().GetNumTargets ();
6256611103cSGreg Clayton     return 0;
6266611103cSGreg Clayton }
62730fdc8d8SChris Lattner 
62830fdc8d8SChris Lattner SBTarget
6292976d00aSJim Ingham SBDebugger::GetSelectedTarget ()
63030fdc8d8SChris Lattner {
631*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
632ceb6b139SCaroline Tice 
6336611103cSGreg Clayton     SBTarget sb_target;
6346611103cSGreg Clayton     if (m_opaque_sp)
6352976d00aSJim Ingham         sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
636ceb6b139SCaroline Tice 
637ceb6b139SCaroline Tice     if (log)
638ceb6b139SCaroline Tice     {
639ceb6b139SCaroline Tice         SBStream sstr;
640ceb6b139SCaroline Tice         sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief);
64193aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
642750cd175SCaroline Tice                      sb_target.get(), sstr.GetData());
643ceb6b139SCaroline Tice     }
644ceb6b139SCaroline Tice 
64530fdc8d8SChris Lattner     return sb_target;
64630fdc8d8SChris Lattner }
64730fdc8d8SChris Lattner 
64830fdc8d8SChris Lattner void
64930fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
65030fdc8d8SChris Lattner {
651*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
652ceb6b139SCaroline Tice 
653ceb6b139SCaroline Tice     if (log)
654cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
655cfd1acedSGreg Clayton                      baton, (int) data_len, (const char *) data, data_len);
656ceb6b139SCaroline Tice 
6576611103cSGreg Clayton     if (m_opaque_sp)
6586611103cSGreg Clayton         m_opaque_sp->DispatchInput ((const char *) data, data_len);
65930fdc8d8SChris Lattner }
66030fdc8d8SChris Lattner 
66130fdc8d8SChris Lattner void
66230fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader)
66330fdc8d8SChris Lattner {
664*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
665ceb6b139SCaroline Tice 
666ceb6b139SCaroline Tice     if (log)
66793aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
668ceb6b139SCaroline Tice 
6696611103cSGreg Clayton     if (m_opaque_sp && reader.IsValid())
67030fdc8d8SChris Lattner     {
67130fdc8d8SChris Lattner         InputReaderSP reader_sp(*reader);
6726611103cSGreg Clayton         m_opaque_sp->PushInputReader (reader_sp);
67330fdc8d8SChris Lattner     }
67430fdc8d8SChris Lattner }
6756611103cSGreg Clayton 
6766611103cSGreg Clayton void
6776611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp)
6786611103cSGreg Clayton {
6796611103cSGreg Clayton     m_opaque_sp = debugger_sp;
6806611103cSGreg Clayton }
6816611103cSGreg Clayton 
6826611103cSGreg Clayton Debugger *
6836611103cSGreg Clayton SBDebugger::get () const
6846611103cSGreg Clayton {
6856611103cSGreg Clayton     return m_opaque_sp.get();
6866611103cSGreg Clayton }
6876611103cSGreg Clayton 
6886611103cSGreg Clayton Debugger &
6896611103cSGreg Clayton SBDebugger::ref () const
6906611103cSGreg Clayton {
6916611103cSGreg Clayton     assert (m_opaque_sp.get());
6926611103cSGreg Clayton     return *m_opaque_sp;
6936611103cSGreg Clayton }
6946611103cSGreg Clayton 
6956611103cSGreg Clayton 
696ebc1bb27SCaroline Tice SBDebugger
697ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id)
698ebc1bb27SCaroline Tice {
699ebc1bb27SCaroline Tice     SBDebugger sb_debugger;
700ebc1bb27SCaroline Tice     lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
701ebc1bb27SCaroline Tice     if (debugger_sp)
702ebc1bb27SCaroline Tice         sb_debugger.reset (debugger_sp);
703ebc1bb27SCaroline Tice     return sb_debugger;
704ebc1bb27SCaroline Tice }
705e40e4218SJim Ingham 
706dd759857SCaroline Tice const char *
707dd759857SCaroline Tice SBDebugger::GetInstanceName()
708dd759857SCaroline Tice {
709dd759857SCaroline Tice     if (m_opaque_sp)
710dd759857SCaroline Tice         return m_opaque_sp->GetInstanceName().AsCString();
711dd759857SCaroline Tice     else
712dd759857SCaroline Tice         return NULL;
713dd759857SCaroline Tice }
714dd759857SCaroline Tice 
7153df9a8dfSCaroline Tice SBError
716dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
7173df9a8dfSCaroline Tice {
7183df9a8dfSCaroline Tice     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
7193df9a8dfSCaroline Tice 
7201559a46bSCaroline Tice     Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true,
721101c7c20SCaroline Tice                                                        debugger_instance_name);
7223df9a8dfSCaroline Tice     SBError sb_error;
7233df9a8dfSCaroline Tice     sb_error.SetError (err);
7243df9a8dfSCaroline Tice 
7253df9a8dfSCaroline Tice     return sb_error;
7263df9a8dfSCaroline Tice }
7273df9a8dfSCaroline Tice 
7283df9a8dfSCaroline Tice lldb::SBStringList
729dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
7303df9a8dfSCaroline Tice {
7313df9a8dfSCaroline Tice     SBStringList ret_value;
732101c7c20SCaroline Tice     lldb::SettableVariableType var_type;
733daccaa9eSCaroline Tice     lldb_private:Error err;
734101c7c20SCaroline Tice 
7353df9a8dfSCaroline Tice     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
7363df9a8dfSCaroline Tice 
737daccaa9eSCaroline Tice     StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
738daccaa9eSCaroline Tice 
739daccaa9eSCaroline Tice     if (err.Success())
740daccaa9eSCaroline Tice     {
741311adf3dSChris Lattner         for (unsigned i = 0; i != value.GetSize(); ++i)
7423df9a8dfSCaroline Tice             ret_value.AppendString (value.GetStringAtIndex(i));
743daccaa9eSCaroline Tice     }
744daccaa9eSCaroline Tice     else
745daccaa9eSCaroline Tice     {
746daccaa9eSCaroline Tice         ret_value.AppendString (err.AsCString());
747daccaa9eSCaroline Tice     }
748daccaa9eSCaroline Tice 
7493df9a8dfSCaroline Tice 
7503df9a8dfSCaroline Tice     return ret_value;
7513df9a8dfSCaroline Tice }
7523df9a8dfSCaroline Tice 
753a7015092SGreg Clayton uint32_t
754a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const
755a7015092SGreg Clayton {
756a7015092SGreg Clayton     if (m_opaque_sp)
757a7015092SGreg Clayton         return m_opaque_sp->GetTerminalWidth ();
758a7015092SGreg Clayton     return 0;
759a7015092SGreg Clayton }
760a7015092SGreg Clayton 
761a7015092SGreg Clayton void
762a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width)
763a7015092SGreg Clayton {
764a7015092SGreg Clayton     if (m_opaque_sp)
765a7015092SGreg Clayton         m_opaque_sp->SetTerminalWidth (term_width);
766a7015092SGreg Clayton }
767a7015092SGreg Clayton 
768a7015092SGreg Clayton const char *
769a7015092SGreg Clayton SBDebugger::GetPrompt() const
770a7015092SGreg Clayton {
771*2d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
772ceb6b139SCaroline Tice 
773ceb6b139SCaroline Tice     if (log)
774cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
775750cd175SCaroline Tice                      (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
776ceb6b139SCaroline Tice 
777a7015092SGreg Clayton     if (m_opaque_sp)
778a7015092SGreg Clayton         return m_opaque_sp->GetPrompt ();
779a7015092SGreg Clayton     return 0;
780a7015092SGreg Clayton }
781a7015092SGreg Clayton 
782a7015092SGreg Clayton void
783a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt)
784a7015092SGreg Clayton {
785a7015092SGreg Clayton     if (m_opaque_sp)
786a7015092SGreg Clayton         m_opaque_sp->SetPrompt (prompt);
787a7015092SGreg Clayton }
788a7015092SGreg Clayton 
789a7015092SGreg Clayton 
790a7015092SGreg Clayton lldb::ScriptLanguage
791a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const
792a7015092SGreg Clayton {
793a7015092SGreg Clayton     if (m_opaque_sp)
794a7015092SGreg Clayton         return m_opaque_sp->GetScriptLanguage ();
795a7015092SGreg Clayton     return eScriptLanguageNone;
796a7015092SGreg Clayton }
797a7015092SGreg Clayton 
798a7015092SGreg Clayton void
799a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang)
800a7015092SGreg Clayton {
801a7015092SGreg Clayton     if (m_opaque_sp)
802a7015092SGreg Clayton         m_opaque_sp->SetScriptLanguage (script_lang);
803a7015092SGreg Clayton }
804a7015092SGreg Clayton 
805a7015092SGreg Clayton 
806a7015092SGreg Clayton 
807a7015092SGreg Clayton 
808e40e4218SJim Ingham bool
809e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value)
810e40e4218SJim Ingham {
811e40e4218SJim Ingham     if (m_opaque_sp)
812e40e4218SJim Ingham         return m_opaque_sp->SetUseExternalEditor (value);
813e40e4218SJim Ingham     else
814e40e4218SJim Ingham         return false;
815e40e4218SJim Ingham }
816e40e4218SJim Ingham 
817e40e4218SJim Ingham bool
818daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor ()
819e40e4218SJim Ingham {
820e40e4218SJim Ingham     if (m_opaque_sp)
821daccaa9eSCaroline Tice         return m_opaque_sp->GetUseExternalEditor ();
822e40e4218SJim Ingham     else
823e40e4218SJim Ingham         return false;
824e40e4218SJim Ingham }
825e40e4218SJim Ingham 
826dde9cff3SCaroline Tice bool
827dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
828dde9cff3SCaroline Tice {
829dde9cff3SCaroline Tice     if (m_opaque_sp)
830dde9cff3SCaroline Tice     {
831dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
832dde9cff3SCaroline Tice         lldb::user_id_t id = m_opaque_sp->GetID();
833cfd1acedSGreg Clayton         description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id);
834dde9cff3SCaroline Tice     }
835dde9cff3SCaroline Tice     else
836dde9cff3SCaroline Tice         description.Printf ("No value");
837dde9cff3SCaroline Tice 
838dde9cff3SCaroline Tice     return true;
839dde9cff3SCaroline Tice }
840