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 { 40ceb6b139SCaroline Tice Log *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 { 57ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 58ceb6b139SCaroline Tice 59ceb6b139SCaroline Tice if (log) 60ceb6b139SCaroline Tice log->Printf ("SBDebugger::Clear ()"); 61ceb6b139SCaroline Tice 6248e42549SGreg Clayton m_opaque_sp.reset(); 6348e42549SGreg Clayton } 6448e42549SGreg Clayton 656611103cSGreg Clayton SBDebugger 666611103cSGreg Clayton SBDebugger::Create() 676611103cSGreg Clayton { 68ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 69ceb6b139SCaroline Tice 70*750cd175SCaroline Tice //if (log) 71*750cd175SCaroline Tice // log->Printf ("SBDebugger::Create ()"); 72ceb6b139SCaroline Tice 736611103cSGreg Clayton SBDebugger debugger; 746611103cSGreg Clayton debugger.reset(Debugger::CreateInstance()); 75ceb6b139SCaroline Tice 76ceb6b139SCaroline Tice if (log) 77ceb6b139SCaroline Tice { 78ceb6b139SCaroline Tice SBStream sstr; 79ceb6b139SCaroline Tice debugger.GetDescription (sstr); 80*750cd175SCaroline Tice log->Printf ("SBDebugger::Create () => SBDebugger (this.sp = %p, '%s')", debugger.m_opaque_sp.get(), sstr.GetData()); 81ceb6b139SCaroline Tice } 82ceb6b139SCaroline Tice 836611103cSGreg Clayton return debugger; 846611103cSGreg Clayton } 856611103cSGreg Clayton 866611103cSGreg Clayton SBDebugger::SBDebugger () : 876611103cSGreg Clayton m_opaque_sp () 886611103cSGreg Clayton { 896611103cSGreg Clayton } 906611103cSGreg Clayton 916611103cSGreg Clayton SBDebugger::~SBDebugger () 926611103cSGreg Clayton { 936611103cSGreg Clayton } 946611103cSGreg Clayton 956611103cSGreg Clayton bool 966611103cSGreg Clayton SBDebugger::IsValid() const 976611103cSGreg Clayton { 986611103cSGreg Clayton return m_opaque_sp.get() != NULL; 996611103cSGreg Clayton } 1006611103cSGreg Clayton 1016611103cSGreg Clayton 10230fdc8d8SChris Lattner void 10330fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 10430fdc8d8SChris Lattner { 1056611103cSGreg Clayton if (m_opaque_sp) 1066611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 10730fdc8d8SChris Lattner } 10830fdc8d8SChris Lattner 1096eee5aa0SGreg Clayton void 1106eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 1116eee5aa0SGreg Clayton { 1126eee5aa0SGreg Clayton if (m_opaque_sp) 1136eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 1146eee5aa0SGreg Clayton } 1156eee5aa0SGreg Clayton 11630fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 11730fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 11830fdc8d8SChris Lattner void 11930fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 12030fdc8d8SChris Lattner { 121ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 122ceb6b139SCaroline Tice 123ceb6b139SCaroline Tice if (log) 124*750cd175SCaroline Tice log->Printf ("SBDebugger::SetInputFileHandle (this.sp=%p, fh=%p, transfer_ownership='%s')", m_opaque_sp.get(), 125*750cd175SCaroline Tice fh, (transfer_ownership ? "true" : "false")); 126ceb6b139SCaroline Tice 1276611103cSGreg Clayton if (m_opaque_sp) 1286611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 12930fdc8d8SChris Lattner } 13030fdc8d8SChris Lattner 13130fdc8d8SChris Lattner void 13230fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 13330fdc8d8SChris Lattner { 134ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 135ceb6b139SCaroline Tice 136ceb6b139SCaroline Tice 137ceb6b139SCaroline Tice if (log) 138*750cd175SCaroline Tice log->Printf ("SBDebugger::SetOutputFileHandle (this.sp=%p, fh=%p, transfer_ownership='%s')", m_opaque_sp.get(), 139*750cd175SCaroline Tice fh, (transfer_ownership ? "true" : "false")); 140ceb6b139SCaroline Tice 1416611103cSGreg Clayton if (m_opaque_sp) 1426611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 14330fdc8d8SChris Lattner } 14430fdc8d8SChris Lattner 14530fdc8d8SChris Lattner void 14630fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 14730fdc8d8SChris Lattner { 148ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 149ceb6b139SCaroline Tice 150ceb6b139SCaroline Tice 151ceb6b139SCaroline Tice if (log) 152*750cd175SCaroline Tice log->Printf ("SBDebugger::SetErrorFileHandle (this.sp=%p, fh=%p, transfer_ownership='%s')", m_opaque_sp.get(), 153*750cd175SCaroline Tice fh, (transfer_ownership ? "true" : "false")); 154ceb6b139SCaroline Tice 1556611103cSGreg Clayton if (m_opaque_sp) 1566611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 15730fdc8d8SChris Lattner } 15830fdc8d8SChris Lattner 15930fdc8d8SChris Lattner FILE * 16030fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 16130fdc8d8SChris Lattner { 1626611103cSGreg Clayton if (m_opaque_sp) 1636611103cSGreg Clayton return m_opaque_sp->GetInputFileHandle(); 1646611103cSGreg Clayton return NULL; 16530fdc8d8SChris Lattner } 16630fdc8d8SChris Lattner 16730fdc8d8SChris Lattner FILE * 16830fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 16930fdc8d8SChris Lattner { 1706611103cSGreg Clayton if (m_opaque_sp) 1716611103cSGreg Clayton return m_opaque_sp->GetOutputFileHandle(); 1726611103cSGreg Clayton return NULL; 17330fdc8d8SChris Lattner } 17430fdc8d8SChris Lattner 17530fdc8d8SChris Lattner FILE * 17630fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 17730fdc8d8SChris Lattner { 1786611103cSGreg Clayton if (m_opaque_sp) 1796611103cSGreg Clayton return m_opaque_sp->GetErrorFileHandle(); 1806611103cSGreg Clayton return NULL; 18130fdc8d8SChris Lattner } 18230fdc8d8SChris Lattner 18330fdc8d8SChris Lattner SBCommandInterpreter 18430fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 18530fdc8d8SChris Lattner { 186ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 187ceb6b139SCaroline Tice 1886611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 1896611103cSGreg Clayton if (m_opaque_sp) 1906611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 191ceb6b139SCaroline Tice 192*750cd175SCaroline Tice if (log) 193*750cd175SCaroline Tice log->Printf ("SBDebugger::GetCommandInterpreter (this.sp=%p) => SBCommandInterpreter (this.obj=%p)", 194*750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 195*750cd175SCaroline Tice 19630fdc8d8SChris Lattner return sb_interpreter; 19730fdc8d8SChris Lattner } 19830fdc8d8SChris Lattner 19930fdc8d8SChris Lattner void 20030fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 20130fdc8d8SChris Lattner { 2026611103cSGreg Clayton if (m_opaque_sp) 2036611103cSGreg Clayton { 2046611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 20530fdc8d8SChris Lattner SBCommandReturnObject result; 20630fdc8d8SChris Lattner 20730fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 20830fdc8d8SChris Lattner 20930fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 21030fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 21130fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 21230fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 21330fdc8d8SChris Lattner 2146611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 21530fdc8d8SChris Lattner { 2166611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 21730fdc8d8SChris Lattner if (process.IsValid()) 21830fdc8d8SChris Lattner { 21930fdc8d8SChris Lattner EventSP event_sp; 2206611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 22130fdc8d8SChris Lattner while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp)) 22230fdc8d8SChris Lattner { 22330fdc8d8SChris Lattner SBEvent event(event_sp); 22430fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 22530fdc8d8SChris Lattner } 22630fdc8d8SChris Lattner } 22730fdc8d8SChris Lattner } 22830fdc8d8SChris Lattner } 2296611103cSGreg Clayton } 23030fdc8d8SChris Lattner 23130fdc8d8SChris Lattner SBListener 23230fdc8d8SChris Lattner SBDebugger::GetListener () 23330fdc8d8SChris Lattner { 234ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 235ceb6b139SCaroline Tice 2366611103cSGreg Clayton SBListener sb_listener; 2376611103cSGreg Clayton if (m_opaque_sp) 2386611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 239ceb6b139SCaroline Tice 240*750cd175SCaroline Tice if (log) 241*750cd175SCaroline Tice log->Printf ("SBDebugger::GetListener (this.sp=%p) => SBListener (this.obj=%p)", m_opaque_sp.get(), 242*750cd175SCaroline Tice sb_listener.get()); 243*750cd175SCaroline Tice 24430fdc8d8SChris Lattner return sb_listener; 24530fdc8d8SChris Lattner } 24630fdc8d8SChris Lattner 24730fdc8d8SChris Lattner void 24830fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 24930fdc8d8SChris Lattner { 25030fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 25130fdc8d8SChris Lattner char stdio_buffer[1024]; 25230fdc8d8SChris Lattner size_t len; 25330fdc8d8SChris Lattner 25430fdc8d8SChris Lattner if (event_type & Process::eBroadcastBitSTDOUT) 25530fdc8d8SChris Lattner { 25630fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 25730fdc8d8SChris Lattner if (out != NULL) 25830fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 25930fdc8d8SChris Lattner } 26030fdc8d8SChris Lattner else if (event_type & Process::eBroadcastBitSTDERR) 26130fdc8d8SChris Lattner { 26230fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 26330fdc8d8SChris Lattner if (out != NULL) 26430fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 26530fdc8d8SChris Lattner } 26630fdc8d8SChris Lattner else if (event_type & Process::eBroadcastBitStateChanged) 26730fdc8d8SChris Lattner { 26830fdc8d8SChris Lattner // Drain any stdout messages. 26930fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 27030fdc8d8SChris Lattner if (out != NULL) 27130fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 27230fdc8d8SChris Lattner 27330fdc8d8SChris Lattner // Drain any stderr messages. 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 StateType event_state = SBProcess::GetStateFromEvent (event); 27930fdc8d8SChris Lattner 28030fdc8d8SChris Lattner if (event_state == eStateInvalid) 28130fdc8d8SChris Lattner return; 28230fdc8d8SChris Lattner 28330fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 28430fdc8d8SChris Lattner if (!is_stopped) 2852976d00aSJim Ingham process.ReportEventState (event, out); 28630fdc8d8SChris Lattner } 28730fdc8d8SChris Lattner } 28830fdc8d8SChris Lattner 28930fdc8d8SChris Lattner void 2902976d00aSJim Ingham SBDebugger::UpdateSelectedThread (SBProcess &process) 29130fdc8d8SChris Lattner { 29230fdc8d8SChris Lattner if (process.IsValid()) 29330fdc8d8SChris Lattner { 2942976d00aSJim Ingham SBThread curr_thread = process.GetSelectedThread (); 29530fdc8d8SChris Lattner SBThread thread; 29630fdc8d8SChris Lattner StopReason curr_thread_stop_reason = eStopReasonInvalid; 29730fdc8d8SChris Lattner if (curr_thread.IsValid()) 29830fdc8d8SChris Lattner { 29930fdc8d8SChris Lattner if (curr_thread.GetStopReason() != eStopReasonInvalid) 30030fdc8d8SChris Lattner curr_thread_stop_reason = curr_thread.GetStopReason (); 30130fdc8d8SChris Lattner } 30230fdc8d8SChris Lattner 30330fdc8d8SChris Lattner if (! curr_thread.IsValid() 30430fdc8d8SChris Lattner || curr_thread_stop_reason == eStopReasonInvalid 30530fdc8d8SChris Lattner || curr_thread_stop_reason == eStopReasonNone) 30630fdc8d8SChris Lattner { 30730fdc8d8SChris Lattner // Prefer a thread that has just completed its plan over another thread as current thread. 30830fdc8d8SChris Lattner SBThread plan_thread; 30930fdc8d8SChris Lattner SBThread other_thread; 31030fdc8d8SChris Lattner const size_t num_threads = process.GetNumThreads (); 31130fdc8d8SChris Lattner size_t i; 31230fdc8d8SChris Lattner for (i = 0; i < num_threads; ++i) 31330fdc8d8SChris Lattner { 31430fdc8d8SChris Lattner thread = process.GetThreadAtIndex(i); 31530fdc8d8SChris Lattner if (thread.GetStopReason () != eStopReasonInvalid) 31630fdc8d8SChris Lattner { 31730fdc8d8SChris Lattner switch (thread.GetStopReason ()) 31830fdc8d8SChris Lattner { 31930fdc8d8SChris Lattner default: 32030fdc8d8SChris Lattner case eStopReasonInvalid: 32130fdc8d8SChris Lattner case eStopReasonNone: 32230fdc8d8SChris Lattner break; 32330fdc8d8SChris Lattner 32430fdc8d8SChris Lattner case eStopReasonTrace: 32530fdc8d8SChris Lattner case eStopReasonBreakpoint: 32630fdc8d8SChris Lattner case eStopReasonWatchpoint: 32730fdc8d8SChris Lattner case eStopReasonSignal: 32830fdc8d8SChris Lattner case eStopReasonException: 32930fdc8d8SChris Lattner if (! other_thread.IsValid()) 33030fdc8d8SChris Lattner other_thread = thread; 33130fdc8d8SChris Lattner break; 33230fdc8d8SChris Lattner case eStopReasonPlanComplete: 33330fdc8d8SChris Lattner if (! plan_thread.IsValid()) 33430fdc8d8SChris Lattner plan_thread = thread; 33530fdc8d8SChris Lattner break; 33630fdc8d8SChris Lattner } 33730fdc8d8SChris Lattner } 33830fdc8d8SChris Lattner } 33930fdc8d8SChris Lattner if (plan_thread.IsValid()) 3402976d00aSJim Ingham process.SetSelectedThreadByID (plan_thread.GetThreadID()); 34130fdc8d8SChris Lattner else if (other_thread.IsValid()) 3422976d00aSJim Ingham process.SetSelectedThreadByID (other_thread.GetThreadID()); 34330fdc8d8SChris Lattner else 34430fdc8d8SChris Lattner { 34530fdc8d8SChris Lattner if (curr_thread.IsValid()) 34630fdc8d8SChris Lattner thread = curr_thread; 34730fdc8d8SChris Lattner else 34830fdc8d8SChris Lattner thread = process.GetThreadAtIndex(0); 34930fdc8d8SChris Lattner 35030fdc8d8SChris Lattner if (thread.IsValid()) 3512976d00aSJim Ingham process.SetSelectedThreadByID (thread.GetThreadID()); 35230fdc8d8SChris Lattner } 35330fdc8d8SChris Lattner } 35430fdc8d8SChris Lattner } 35530fdc8d8SChris Lattner } 35630fdc8d8SChris Lattner 35730fdc8d8SChris Lattner SBSourceManager & 35830fdc8d8SChris Lattner SBDebugger::GetSourceManager () 35930fdc8d8SChris Lattner { 36030fdc8d8SChris Lattner static SourceManager g_lldb_source_manager; 36130fdc8d8SChris Lattner static SBSourceManager g_sb_source_manager (g_lldb_source_manager); 36230fdc8d8SChris Lattner return g_sb_source_manager; 36330fdc8d8SChris Lattner } 36430fdc8d8SChris Lattner 36530fdc8d8SChris Lattner 36630fdc8d8SChris Lattner bool 36730fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 36830fdc8d8SChris Lattner { 36930fdc8d8SChris Lattner if (arch_name && arch_name_len) 37030fdc8d8SChris Lattner { 371daccaa9eSCaroline Tice ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture (); 372daccaa9eSCaroline Tice 37330fdc8d8SChris Lattner if (default_arch.IsValid()) 37430fdc8d8SChris Lattner { 37530fdc8d8SChris Lattner ::snprintf (arch_name, arch_name_len, "%s", default_arch.AsCString()); 37630fdc8d8SChris Lattner return true; 37730fdc8d8SChris Lattner } 37830fdc8d8SChris Lattner } 37930fdc8d8SChris Lattner if (arch_name && arch_name_len) 38030fdc8d8SChris Lattner arch_name[0] = '\0'; 38130fdc8d8SChris Lattner return false; 38230fdc8d8SChris Lattner } 38330fdc8d8SChris Lattner 38430fdc8d8SChris Lattner 38530fdc8d8SChris Lattner bool 38630fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 38730fdc8d8SChris Lattner { 38830fdc8d8SChris Lattner if (arch_name) 38930fdc8d8SChris Lattner { 39030fdc8d8SChris Lattner ArchSpec arch (arch_name); 39130fdc8d8SChris Lattner if (arch.IsValid()) 39230fdc8d8SChris Lattner { 393daccaa9eSCaroline Tice lldb_private::Target::SetDefaultArchitecture (arch); 39430fdc8d8SChris Lattner return true; 39530fdc8d8SChris Lattner } 39630fdc8d8SChris Lattner } 39730fdc8d8SChris Lattner return false; 39830fdc8d8SChris Lattner } 39930fdc8d8SChris Lattner 40030fdc8d8SChris Lattner ScriptLanguage 40130fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 40230fdc8d8SChris Lattner { 40330fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 40430fdc8d8SChris Lattner eScriptLanguageDefault, 40530fdc8d8SChris Lattner NULL); 40630fdc8d8SChris Lattner } 40730fdc8d8SChris Lattner 40830fdc8d8SChris Lattner const char * 40930fdc8d8SChris Lattner SBDebugger::GetVersionString () 41030fdc8d8SChris Lattner { 41130fdc8d8SChris Lattner return lldb_private::GetVersion(); 41230fdc8d8SChris Lattner } 41330fdc8d8SChris Lattner 41430fdc8d8SChris Lattner const char * 41530fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state) 41630fdc8d8SChris Lattner { 417ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 418ceb6b139SCaroline Tice 419ceb6b139SCaroline Tice if (log) 420*750cd175SCaroline Tice log->Printf ("SBDebugger::StateAsCString (state=%d) => '%s'", state, 421*750cd175SCaroline Tice lldb_private::StateAsCString (state)); 422ceb6b139SCaroline Tice 42330fdc8d8SChris Lattner return lldb_private::StateAsCString (state); 42430fdc8d8SChris Lattner } 42530fdc8d8SChris Lattner 42630fdc8d8SChris Lattner bool 42730fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state) 42830fdc8d8SChris Lattner { 42930fdc8d8SChris Lattner return lldb_private::StateIsRunningState (state); 43030fdc8d8SChris Lattner } 43130fdc8d8SChris Lattner 43230fdc8d8SChris Lattner bool 43330fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state) 43430fdc8d8SChris Lattner { 435ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 436ceb6b139SCaroline Tice 437ceb6b139SCaroline Tice if (log) 438*750cd175SCaroline Tice log->Printf ("SBDebugger::StateIsStoppedState (state=%d) => '%s'", state, 439ceb6b139SCaroline Tice (lldb_private::StateIsStoppedState (state) ? "true" : "false")); 440ceb6b139SCaroline Tice 44130fdc8d8SChris Lattner return lldb_private::StateIsStoppedState (state); 44230fdc8d8SChris Lattner } 44330fdc8d8SChris Lattner 44430fdc8d8SChris Lattner 44530fdc8d8SChris Lattner SBTarget 44630fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 44730fdc8d8SChris Lattner const char *target_triple) 44830fdc8d8SChris Lattner { 4496611103cSGreg Clayton SBTarget target; 4506611103cSGreg Clayton if (m_opaque_sp) 4516611103cSGreg Clayton { 45230fdc8d8SChris Lattner ArchSpec arch; 453274060b6SGreg Clayton FileSpec file_spec (filename, true); 45430fdc8d8SChris Lattner arch.SetArchFromTargetTriple(target_triple); 45530fdc8d8SChris Lattner TargetSP target_sp; 4566611103cSGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, NULL, true, target_sp)); 4576611103cSGreg Clayton target.reset (target_sp); 4586611103cSGreg Clayton } 45930fdc8d8SChris Lattner return target; 46030fdc8d8SChris Lattner } 46130fdc8d8SChris Lattner 46230fdc8d8SChris Lattner SBTarget 46330fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *archname) 46430fdc8d8SChris Lattner { 465ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 466ceb6b139SCaroline Tice 467*750cd175SCaroline Tice //if (log) 468*750cd175SCaroline Tice // log->Printf ("SBDebugger::CreateTargetWithFileAndArch (this.sp=%p, filename='%s', arcname='%s')", 469*750cd175SCaroline Tice // m_opaque_sp.get() filename, archname); 470ceb6b139SCaroline Tice 4716611103cSGreg Clayton SBTarget target; 4726611103cSGreg Clayton if (m_opaque_sp) 4736611103cSGreg Clayton { 474274060b6SGreg Clayton FileSpec file (filename, true); 475daccaa9eSCaroline Tice ArchSpec arch = lldb_private::Target::GetDefaultArchitecture (); 47630fdc8d8SChris Lattner TargetSP target_sp; 47730fdc8d8SChris Lattner Error error; 47830fdc8d8SChris Lattner 47930fdc8d8SChris Lattner if (archname != NULL) 48030fdc8d8SChris Lattner { 48130fdc8d8SChris Lattner ArchSpec arch2 (archname); 4826611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch2, NULL, true, target_sp); 48330fdc8d8SChris Lattner } 48430fdc8d8SChris Lattner else 48530fdc8d8SChris Lattner { 48630fdc8d8SChris Lattner if (!arch.IsValid()) 48730fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT; 48830fdc8d8SChris Lattner 4896611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 49030fdc8d8SChris Lattner 49130fdc8d8SChris Lattner if (error.Fail()) 49230fdc8d8SChris Lattner { 49330fdc8d8SChris Lattner if (arch == LLDB_ARCH_DEFAULT_32BIT) 49430fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_64BIT; 49530fdc8d8SChris Lattner else 49630fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_32BIT; 49730fdc8d8SChris Lattner 4986611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 49930fdc8d8SChris Lattner } 50030fdc8d8SChris Lattner } 50130fdc8d8SChris Lattner 50230fdc8d8SChris Lattner if (error.Success()) 5036611103cSGreg Clayton { 5042976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5056611103cSGreg Clayton target.reset(target_sp); 5066611103cSGreg Clayton } 5076611103cSGreg Clayton } 508ceb6b139SCaroline Tice 509ceb6b139SCaroline Tice if (log) 510ceb6b139SCaroline Tice { 511ceb6b139SCaroline Tice SBStream sstr; 512ceb6b139SCaroline Tice target.GetDescription (sstr, lldb::eDescriptionLevelFull); 513*750cd175SCaroline Tice log->Printf ("SBDebugger::CreateTargetWithFileAndArch (this.sp=%p, filename='%s', arcname='%s') " 514*750cd175SCaroline Tice "=> SBTarget: this.sp=%p, '%s'", m_opaque_sp.get(), filename, archname, target.get(), 515*750cd175SCaroline Tice sstr.GetData()); 516ceb6b139SCaroline Tice } 517ceb6b139SCaroline Tice 5186611103cSGreg Clayton return target; 51930fdc8d8SChris Lattner } 52030fdc8d8SChris Lattner 52130fdc8d8SChris Lattner SBTarget 52230fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 52330fdc8d8SChris Lattner { 5246611103cSGreg Clayton SBTarget target; 5256611103cSGreg Clayton if (m_opaque_sp) 5266611103cSGreg Clayton { 527274060b6SGreg Clayton FileSpec file (filename, true); 528daccaa9eSCaroline Tice ArchSpec arch = lldb_private::Target::GetDefaultArchitecture (); 52930fdc8d8SChris Lattner TargetSP target_sp; 53030fdc8d8SChris Lattner Error error; 53130fdc8d8SChris Lattner 53230fdc8d8SChris Lattner if (!arch.IsValid()) 53330fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT; 53430fdc8d8SChris Lattner 5356611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 53630fdc8d8SChris Lattner 53730fdc8d8SChris Lattner if (error.Fail()) 53830fdc8d8SChris Lattner { 53930fdc8d8SChris Lattner if (arch == LLDB_ARCH_DEFAULT_32BIT) 54030fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_64BIT; 54130fdc8d8SChris Lattner else 54230fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_32BIT; 54330fdc8d8SChris Lattner 5446611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 54530fdc8d8SChris Lattner } 54630fdc8d8SChris Lattner 5476611103cSGreg Clayton if (error.Success()) 5486611103cSGreg Clayton { 5492976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5506611103cSGreg Clayton target.reset (target_sp); 5516611103cSGreg Clayton } 5526611103cSGreg Clayton } 5536611103cSGreg Clayton return target; 55430fdc8d8SChris Lattner } 55530fdc8d8SChris Lattner 55630fdc8d8SChris Lattner SBTarget 55730fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 55830fdc8d8SChris Lattner { 5596611103cSGreg Clayton SBTarget sb_target; 5606611103cSGreg Clayton if (m_opaque_sp) 5616611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 56230fdc8d8SChris Lattner return sb_target; 56330fdc8d8SChris Lattner } 56430fdc8d8SChris Lattner 56530fdc8d8SChris Lattner SBTarget 56630fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 56730fdc8d8SChris Lattner { 5686611103cSGreg Clayton SBTarget sb_target; 5696611103cSGreg Clayton if (m_opaque_sp) 5706611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 57130fdc8d8SChris Lattner return sb_target; 57230fdc8d8SChris Lattner } 57330fdc8d8SChris Lattner 57430fdc8d8SChris Lattner SBTarget 57530fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 57630fdc8d8SChris Lattner { 5776611103cSGreg Clayton SBTarget sb_target; 5786611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 5796611103cSGreg Clayton { 58030fdc8d8SChris Lattner ArchSpec arch; 58130fdc8d8SChris Lattner if (arch_name) 58230fdc8d8SChris Lattner arch.SetArch(arch_name); 583274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 5846611103cSGreg Clayton sb_target.reset(target_sp); 5856611103cSGreg Clayton } 5866611103cSGreg Clayton return sb_target; 58730fdc8d8SChris Lattner } 58830fdc8d8SChris Lattner 58930fdc8d8SChris Lattner SBTarget 59030fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp) 59130fdc8d8SChris Lattner { 5926611103cSGreg Clayton SBTarget sb_target; 5936611103cSGreg Clayton if (m_opaque_sp) 5946611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 59530fdc8d8SChris Lattner return sb_target; 59630fdc8d8SChris Lattner } 59730fdc8d8SChris Lattner 59830fdc8d8SChris Lattner 59930fdc8d8SChris Lattner uint32_t 60030fdc8d8SChris Lattner SBDebugger::GetNumTargets () 60130fdc8d8SChris Lattner { 6026611103cSGreg Clayton if (m_opaque_sp) 6036611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 6046611103cSGreg Clayton return 0; 6056611103cSGreg Clayton } 60630fdc8d8SChris Lattner 60730fdc8d8SChris Lattner SBTarget 6082976d00aSJim Ingham SBDebugger::GetSelectedTarget () 60930fdc8d8SChris Lattner { 610ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 611ceb6b139SCaroline Tice 612*750cd175SCaroline Tice //if (log) 613*750cd175SCaroline Tice // log->Printf ("SBDebugger::GetSelectedTarget ()"); 614ceb6b139SCaroline Tice 6156611103cSGreg Clayton SBTarget sb_target; 6166611103cSGreg Clayton if (m_opaque_sp) 6172976d00aSJim Ingham sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ()); 618ceb6b139SCaroline Tice 619ceb6b139SCaroline Tice if (log) 620ceb6b139SCaroline Tice { 621ceb6b139SCaroline Tice SBStream sstr; 622ceb6b139SCaroline Tice sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief); 623*750cd175SCaroline Tice log->Printf ("SBDebugger::GetSelectedTarget (this.sp=%p) => SBTarget: this.sp=%p, '%s'", m_opaque_sp.get(), 624*750cd175SCaroline Tice sb_target.get(), sstr.GetData()); 625ceb6b139SCaroline Tice } 626ceb6b139SCaroline Tice 62730fdc8d8SChris Lattner return sb_target; 62830fdc8d8SChris Lattner } 62930fdc8d8SChris Lattner 63030fdc8d8SChris Lattner void 63130fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 63230fdc8d8SChris Lattner { 633ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 634ceb6b139SCaroline Tice 635ceb6b139SCaroline Tice if (log) 636*750cd175SCaroline Tice log->Printf ("SBDebugger::DispatchInput (this.sp=%p, baton=%p, data='%s', size_t=%d)", m_opaque_sp.get(), 637*750cd175SCaroline Tice baton, (const char *) data, (uint32_t) data_len); 638ceb6b139SCaroline Tice 6396611103cSGreg Clayton if (m_opaque_sp) 6406611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 64130fdc8d8SChris Lattner } 64230fdc8d8SChris Lattner 64330fdc8d8SChris Lattner void 64430fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 64530fdc8d8SChris Lattner { 646ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 647ceb6b139SCaroline Tice 648ceb6b139SCaroline Tice if (log) 649*750cd175SCaroline Tice log->Printf ("SBDebugger::PushInputReader (this.sp=%p, reader=%p)", m_opaque_sp.get(), &reader); 650ceb6b139SCaroline Tice 6516611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 65230fdc8d8SChris Lattner { 65330fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 6546611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 65530fdc8d8SChris Lattner } 65630fdc8d8SChris Lattner } 6576611103cSGreg Clayton 6586611103cSGreg Clayton void 6596611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp) 6606611103cSGreg Clayton { 6616611103cSGreg Clayton m_opaque_sp = debugger_sp; 6626611103cSGreg Clayton } 6636611103cSGreg Clayton 6646611103cSGreg Clayton Debugger * 6656611103cSGreg Clayton SBDebugger::get () const 6666611103cSGreg Clayton { 6676611103cSGreg Clayton return m_opaque_sp.get(); 6686611103cSGreg Clayton } 6696611103cSGreg Clayton 6706611103cSGreg Clayton Debugger & 6716611103cSGreg Clayton SBDebugger::ref () const 6726611103cSGreg Clayton { 6736611103cSGreg Clayton assert (m_opaque_sp.get()); 6746611103cSGreg Clayton return *m_opaque_sp; 6756611103cSGreg Clayton } 6766611103cSGreg Clayton 6776611103cSGreg Clayton 678ebc1bb27SCaroline Tice SBDebugger 679ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 680ebc1bb27SCaroline Tice { 681ebc1bb27SCaroline Tice SBDebugger sb_debugger; 682ebc1bb27SCaroline Tice lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 683ebc1bb27SCaroline Tice if (debugger_sp) 684ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 685ebc1bb27SCaroline Tice return sb_debugger; 686ebc1bb27SCaroline Tice } 687e40e4218SJim Ingham 688dd759857SCaroline Tice const char * 689dd759857SCaroline Tice SBDebugger::GetInstanceName() 690dd759857SCaroline Tice { 691dd759857SCaroline Tice if (m_opaque_sp) 692dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 693dd759857SCaroline Tice else 694dd759857SCaroline Tice return NULL; 695dd759857SCaroline Tice } 696dd759857SCaroline Tice 6973df9a8dfSCaroline Tice SBError 698dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 6993df9a8dfSCaroline Tice { 7003df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7013df9a8dfSCaroline Tice 7021559a46bSCaroline Tice Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true, 703101c7c20SCaroline Tice debugger_instance_name); 7043df9a8dfSCaroline Tice SBError sb_error; 7053df9a8dfSCaroline Tice sb_error.SetError (err); 7063df9a8dfSCaroline Tice 7073df9a8dfSCaroline Tice return sb_error; 7083df9a8dfSCaroline Tice } 7093df9a8dfSCaroline Tice 7103df9a8dfSCaroline Tice lldb::SBStringList 711dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 7123df9a8dfSCaroline Tice { 7133df9a8dfSCaroline Tice SBStringList ret_value; 714101c7c20SCaroline Tice lldb::SettableVariableType var_type; 715daccaa9eSCaroline Tice lldb_private:Error err; 716101c7c20SCaroline Tice 7173df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7183df9a8dfSCaroline Tice 719daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 720daccaa9eSCaroline Tice 721daccaa9eSCaroline Tice if (err.Success()) 722daccaa9eSCaroline Tice { 723311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 7243df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 725daccaa9eSCaroline Tice } 726daccaa9eSCaroline Tice else 727daccaa9eSCaroline Tice { 728daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 729daccaa9eSCaroline Tice } 730daccaa9eSCaroline Tice 7313df9a8dfSCaroline Tice 7323df9a8dfSCaroline Tice return ret_value; 7333df9a8dfSCaroline Tice } 7343df9a8dfSCaroline Tice 735a7015092SGreg Clayton uint32_t 736a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 737a7015092SGreg Clayton { 738a7015092SGreg Clayton if (m_opaque_sp) 739a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 740a7015092SGreg Clayton return 0; 741a7015092SGreg Clayton } 742a7015092SGreg Clayton 743a7015092SGreg Clayton void 744a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 745a7015092SGreg Clayton { 746a7015092SGreg Clayton if (m_opaque_sp) 747a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 748a7015092SGreg Clayton } 749a7015092SGreg Clayton 750a7015092SGreg Clayton const char * 751a7015092SGreg Clayton SBDebugger::GetPrompt() const 752a7015092SGreg Clayton { 753ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 754ceb6b139SCaroline Tice 755ceb6b139SCaroline Tice if (log) 756*750cd175SCaroline Tice log->Printf ("SBDebugger::GetPrompt (this.sp=%p) => '%s'", m_opaque_sp.get(), 757*750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 758ceb6b139SCaroline Tice 759a7015092SGreg Clayton if (m_opaque_sp) 760a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 761a7015092SGreg Clayton return 0; 762a7015092SGreg Clayton } 763a7015092SGreg Clayton 764a7015092SGreg Clayton void 765a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 766a7015092SGreg Clayton { 767a7015092SGreg Clayton if (m_opaque_sp) 768a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 769a7015092SGreg Clayton } 770a7015092SGreg Clayton 771a7015092SGreg Clayton 772a7015092SGreg Clayton lldb::ScriptLanguage 773a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 774a7015092SGreg Clayton { 775a7015092SGreg Clayton if (m_opaque_sp) 776a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 777a7015092SGreg Clayton return eScriptLanguageNone; 778a7015092SGreg Clayton } 779a7015092SGreg Clayton 780a7015092SGreg Clayton void 781a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang) 782a7015092SGreg Clayton { 783a7015092SGreg Clayton if (m_opaque_sp) 784a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 785a7015092SGreg Clayton } 786a7015092SGreg Clayton 787a7015092SGreg Clayton 788a7015092SGreg Clayton 789a7015092SGreg Clayton 790e40e4218SJim Ingham bool 791e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 792e40e4218SJim Ingham { 793e40e4218SJim Ingham if (m_opaque_sp) 794e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 795e40e4218SJim Ingham else 796e40e4218SJim Ingham return false; 797e40e4218SJim Ingham } 798e40e4218SJim Ingham 799e40e4218SJim Ingham bool 800daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 801e40e4218SJim Ingham { 802e40e4218SJim Ingham if (m_opaque_sp) 803daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 804e40e4218SJim Ingham else 805e40e4218SJim Ingham return false; 806e40e4218SJim Ingham } 807e40e4218SJim Ingham 808dde9cff3SCaroline Tice bool 809dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 810dde9cff3SCaroline Tice { 811dde9cff3SCaroline Tice if (m_opaque_sp) 812dde9cff3SCaroline Tice { 813dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 814dde9cff3SCaroline Tice lldb::user_id_t id = m_opaque_sp->GetID(); 815dde9cff3SCaroline Tice description.Printf ("Debugger (instance: '%s', id: %d)", name, id); 816dde9cff3SCaroline Tice } 817dde9cff3SCaroline Tice else 818dde9cff3SCaroline Tice description.Printf ("No value"); 819dde9cff3SCaroline Tice 820dde9cff3SCaroline Tice return true; 821dde9cff3SCaroline Tice } 822