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 { 402d4edfbcSGreg 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 { 572d4edfbcSGreg 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()); 613d6086f6SCaroline Tice 623d6086f6SCaroline Tice if (m_opaque_sp) 633d6086f6SCaroline Tice m_opaque_sp->CleanUpInputReaders (); 64ceb6b139SCaroline Tice 6548e42549SGreg Clayton m_opaque_sp.reset(); 6648e42549SGreg Clayton } 6748e42549SGreg Clayton 686611103cSGreg Clayton SBDebugger 696611103cSGreg Clayton SBDebugger::Create() 706611103cSGreg Clayton { 712d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 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); 8093aa84e8SGreg Clayton log->Printf ("SBDebugger::Create () => SBDebugger(%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 91efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 92efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 93efabb123SGreg Clayton { 94efabb123SGreg Clayton } 95efabb123SGreg Clayton 96efabb123SGreg Clayton SBDebugger & 97efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 98efabb123SGreg Clayton { 99efabb123SGreg Clayton if (this != &rhs) 100efabb123SGreg Clayton { 101efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 102efabb123SGreg Clayton } 103efabb123SGreg Clayton return *this; 104efabb123SGreg Clayton } 105efabb123SGreg Clayton 1066611103cSGreg Clayton SBDebugger::~SBDebugger () 1076611103cSGreg Clayton { 1086611103cSGreg Clayton } 1096611103cSGreg Clayton 1106611103cSGreg Clayton bool 1116611103cSGreg Clayton SBDebugger::IsValid() const 1126611103cSGreg Clayton { 1136611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1146611103cSGreg Clayton } 1156611103cSGreg Clayton 1166611103cSGreg Clayton 11730fdc8d8SChris Lattner void 11830fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 11930fdc8d8SChris Lattner { 1206611103cSGreg Clayton if (m_opaque_sp) 1216611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 12230fdc8d8SChris Lattner } 12330fdc8d8SChris Lattner 1246eee5aa0SGreg Clayton void 1256eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 1266eee5aa0SGreg Clayton { 1276eee5aa0SGreg Clayton if (m_opaque_sp) 1286eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 1296eee5aa0SGreg Clayton } 1306eee5aa0SGreg Clayton 13130fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 13230fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 13330fdc8d8SChris Lattner void 13430fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 13530fdc8d8SChris Lattner { 1362d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 137ceb6b139SCaroline Tice 138ceb6b139SCaroline Tice if (log) 139cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 140cfd1acedSGreg Clayton fh, transfer_ownership); 141ceb6b139SCaroline Tice 1426611103cSGreg Clayton if (m_opaque_sp) 1436611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 14430fdc8d8SChris Lattner } 14530fdc8d8SChris Lattner 14630fdc8d8SChris Lattner void 14730fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 14830fdc8d8SChris Lattner { 1492d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 150ceb6b139SCaroline Tice 151ceb6b139SCaroline Tice 152ceb6b139SCaroline Tice if (log) 153cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 154cfd1acedSGreg Clayton fh, transfer_ownership); 155ceb6b139SCaroline Tice 1566611103cSGreg Clayton if (m_opaque_sp) 1576611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 15830fdc8d8SChris Lattner } 15930fdc8d8SChris Lattner 16030fdc8d8SChris Lattner void 16130fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 16230fdc8d8SChris Lattner { 1632d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 164ceb6b139SCaroline Tice 165ceb6b139SCaroline Tice 166ceb6b139SCaroline Tice if (log) 167cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 168cfd1acedSGreg Clayton fh, transfer_ownership); 169ceb6b139SCaroline Tice 1706611103cSGreg Clayton if (m_opaque_sp) 1716611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 17230fdc8d8SChris Lattner } 17330fdc8d8SChris Lattner 17430fdc8d8SChris Lattner FILE * 17530fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 17630fdc8d8SChris Lattner { 1776611103cSGreg Clayton if (m_opaque_sp) 1786611103cSGreg Clayton return m_opaque_sp->GetInputFileHandle(); 1796611103cSGreg Clayton return NULL; 18030fdc8d8SChris Lattner } 18130fdc8d8SChris Lattner 18230fdc8d8SChris Lattner FILE * 18330fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 18430fdc8d8SChris Lattner { 1856611103cSGreg Clayton if (m_opaque_sp) 1866611103cSGreg Clayton return m_opaque_sp->GetOutputFileHandle(); 1876611103cSGreg Clayton return NULL; 18830fdc8d8SChris Lattner } 18930fdc8d8SChris Lattner 19030fdc8d8SChris Lattner FILE * 19130fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 19230fdc8d8SChris Lattner { 1936611103cSGreg Clayton if (m_opaque_sp) 1946611103cSGreg Clayton return m_opaque_sp->GetErrorFileHandle(); 1956611103cSGreg Clayton return NULL; 19630fdc8d8SChris Lattner } 19730fdc8d8SChris Lattner 19830fdc8d8SChris Lattner SBCommandInterpreter 19930fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 20030fdc8d8SChris Lattner { 2012d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 202ceb6b139SCaroline Tice 2036611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 2046611103cSGreg Clayton if (m_opaque_sp) 2056611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 206ceb6b139SCaroline Tice 207750cd175SCaroline Tice if (log) 20893aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 209750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 210750cd175SCaroline Tice 21130fdc8d8SChris Lattner return sb_interpreter; 21230fdc8d8SChris Lattner } 21330fdc8d8SChris Lattner 21430fdc8d8SChris Lattner void 21530fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 21630fdc8d8SChris Lattner { 2176611103cSGreg Clayton if (m_opaque_sp) 2186611103cSGreg Clayton { 2196611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 22030fdc8d8SChris Lattner SBCommandReturnObject result; 22130fdc8d8SChris Lattner 22230fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 22330fdc8d8SChris Lattner 22430fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 22530fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 22630fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 22730fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 22830fdc8d8SChris Lattner 2296611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 23030fdc8d8SChris Lattner { 2316611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 23230fdc8d8SChris Lattner if (process.IsValid()) 23330fdc8d8SChris Lattner { 23430fdc8d8SChris Lattner EventSP event_sp; 2356611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 23630fdc8d8SChris Lattner while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp)) 23730fdc8d8SChris Lattner { 23830fdc8d8SChris Lattner SBEvent event(event_sp); 23930fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 24030fdc8d8SChris Lattner } 24130fdc8d8SChris Lattner } 24230fdc8d8SChris Lattner } 24330fdc8d8SChris Lattner } 2446611103cSGreg Clayton } 24530fdc8d8SChris Lattner 24630fdc8d8SChris Lattner SBListener 24730fdc8d8SChris Lattner SBDebugger::GetListener () 24830fdc8d8SChris Lattner { 2492d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 250ceb6b139SCaroline Tice 2516611103cSGreg Clayton SBListener sb_listener; 2526611103cSGreg Clayton if (m_opaque_sp) 2536611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 254ceb6b139SCaroline Tice 255750cd175SCaroline Tice if (log) 25693aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 257750cd175SCaroline Tice sb_listener.get()); 258750cd175SCaroline Tice 25930fdc8d8SChris Lattner return sb_listener; 26030fdc8d8SChris Lattner } 26130fdc8d8SChris Lattner 26230fdc8d8SChris Lattner void 26330fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 26430fdc8d8SChris Lattner { 26530fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 26630fdc8d8SChris Lattner char stdio_buffer[1024]; 26730fdc8d8SChris Lattner size_t len; 26830fdc8d8SChris Lattner 26930fdc8d8SChris Lattner if (event_type & Process::eBroadcastBitSTDOUT) 27030fdc8d8SChris Lattner { 27130fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 27230fdc8d8SChris Lattner if (out != NULL) 27330fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 27430fdc8d8SChris Lattner } 27530fdc8d8SChris Lattner else if (event_type & Process::eBroadcastBitSTDERR) 27630fdc8d8SChris Lattner { 27730fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 27830fdc8d8SChris Lattner if (out != NULL) 27930fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 28030fdc8d8SChris Lattner } 28130fdc8d8SChris Lattner else if (event_type & Process::eBroadcastBitStateChanged) 28230fdc8d8SChris Lattner { 28330fdc8d8SChris Lattner // Drain any stdout messages. 28430fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 28530fdc8d8SChris Lattner if (out != NULL) 28630fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 28730fdc8d8SChris Lattner 28830fdc8d8SChris Lattner // Drain any stderr messages. 28930fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 29030fdc8d8SChris Lattner if (out != NULL) 29130fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 29230fdc8d8SChris Lattner 29330fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 29430fdc8d8SChris Lattner 29530fdc8d8SChris Lattner if (event_state == eStateInvalid) 29630fdc8d8SChris Lattner return; 29730fdc8d8SChris Lattner 29830fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 29930fdc8d8SChris Lattner if (!is_stopped) 3002976d00aSJim Ingham process.ReportEventState (event, out); 30130fdc8d8SChris Lattner } 30230fdc8d8SChris Lattner } 30330fdc8d8SChris Lattner 30430fdc8d8SChris Lattner void 3052976d00aSJim Ingham SBDebugger::UpdateSelectedThread (SBProcess &process) 30630fdc8d8SChris Lattner { 30730fdc8d8SChris Lattner if (process.IsValid()) 30830fdc8d8SChris Lattner { 3092976d00aSJim Ingham SBThread curr_thread = process.GetSelectedThread (); 31030fdc8d8SChris Lattner SBThread thread; 31130fdc8d8SChris Lattner StopReason curr_thread_stop_reason = eStopReasonInvalid; 31230fdc8d8SChris Lattner if (curr_thread.IsValid()) 31330fdc8d8SChris Lattner { 31430fdc8d8SChris Lattner if (curr_thread.GetStopReason() != eStopReasonInvalid) 31530fdc8d8SChris Lattner curr_thread_stop_reason = curr_thread.GetStopReason (); 31630fdc8d8SChris Lattner } 31730fdc8d8SChris Lattner 31830fdc8d8SChris Lattner if (! curr_thread.IsValid() 31930fdc8d8SChris Lattner || curr_thread_stop_reason == eStopReasonInvalid 32030fdc8d8SChris Lattner || curr_thread_stop_reason == eStopReasonNone) 32130fdc8d8SChris Lattner { 32230fdc8d8SChris Lattner // Prefer a thread that has just completed its plan over another thread as current thread. 32330fdc8d8SChris Lattner SBThread plan_thread; 32430fdc8d8SChris Lattner SBThread other_thread; 32530fdc8d8SChris Lattner const size_t num_threads = process.GetNumThreads (); 32630fdc8d8SChris Lattner size_t i; 32730fdc8d8SChris Lattner for (i = 0; i < num_threads; ++i) 32830fdc8d8SChris Lattner { 32930fdc8d8SChris Lattner thread = process.GetThreadAtIndex(i); 33030fdc8d8SChris Lattner if (thread.GetStopReason () != eStopReasonInvalid) 33130fdc8d8SChris Lattner { 33230fdc8d8SChris Lattner switch (thread.GetStopReason ()) 33330fdc8d8SChris Lattner { 33430fdc8d8SChris Lattner default: 33530fdc8d8SChris Lattner case eStopReasonInvalid: 33630fdc8d8SChris Lattner case eStopReasonNone: 33730fdc8d8SChris Lattner break; 33830fdc8d8SChris Lattner 33930fdc8d8SChris Lattner case eStopReasonTrace: 34030fdc8d8SChris Lattner case eStopReasonBreakpoint: 34130fdc8d8SChris Lattner case eStopReasonWatchpoint: 34230fdc8d8SChris Lattner case eStopReasonSignal: 34330fdc8d8SChris Lattner case eStopReasonException: 34430fdc8d8SChris Lattner if (! other_thread.IsValid()) 34530fdc8d8SChris Lattner other_thread = thread; 34630fdc8d8SChris Lattner break; 34730fdc8d8SChris Lattner case eStopReasonPlanComplete: 34830fdc8d8SChris Lattner if (! plan_thread.IsValid()) 34930fdc8d8SChris Lattner plan_thread = thread; 35030fdc8d8SChris Lattner break; 35130fdc8d8SChris Lattner } 35230fdc8d8SChris Lattner } 35330fdc8d8SChris Lattner } 35430fdc8d8SChris Lattner if (plan_thread.IsValid()) 3552976d00aSJim Ingham process.SetSelectedThreadByID (plan_thread.GetThreadID()); 35630fdc8d8SChris Lattner else if (other_thread.IsValid()) 3572976d00aSJim Ingham process.SetSelectedThreadByID (other_thread.GetThreadID()); 35830fdc8d8SChris Lattner else 35930fdc8d8SChris Lattner { 36030fdc8d8SChris Lattner if (curr_thread.IsValid()) 36130fdc8d8SChris Lattner thread = curr_thread; 36230fdc8d8SChris Lattner else 36330fdc8d8SChris Lattner thread = process.GetThreadAtIndex(0); 36430fdc8d8SChris Lattner 36530fdc8d8SChris Lattner if (thread.IsValid()) 3662976d00aSJim Ingham process.SetSelectedThreadByID (thread.GetThreadID()); 36730fdc8d8SChris Lattner } 36830fdc8d8SChris Lattner } 36930fdc8d8SChris Lattner } 37030fdc8d8SChris Lattner } 37130fdc8d8SChris Lattner 37230fdc8d8SChris Lattner SBSourceManager & 37330fdc8d8SChris Lattner SBDebugger::GetSourceManager () 37430fdc8d8SChris Lattner { 37530fdc8d8SChris Lattner static SourceManager g_lldb_source_manager; 376efabb123SGreg Clayton static SBSourceManager g_sb_source_manager (&g_lldb_source_manager); 37730fdc8d8SChris Lattner return g_sb_source_manager; 37830fdc8d8SChris Lattner } 37930fdc8d8SChris Lattner 38030fdc8d8SChris Lattner 38130fdc8d8SChris Lattner bool 38230fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 38330fdc8d8SChris Lattner { 38430fdc8d8SChris Lattner if (arch_name && arch_name_len) 38530fdc8d8SChris Lattner { 386daccaa9eSCaroline Tice ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture (); 387daccaa9eSCaroline Tice 38830fdc8d8SChris Lattner if (default_arch.IsValid()) 38930fdc8d8SChris Lattner { 39030fdc8d8SChris Lattner ::snprintf (arch_name, arch_name_len, "%s", default_arch.AsCString()); 39130fdc8d8SChris Lattner return true; 39230fdc8d8SChris Lattner } 39330fdc8d8SChris Lattner } 39430fdc8d8SChris Lattner if (arch_name && arch_name_len) 39530fdc8d8SChris Lattner arch_name[0] = '\0'; 39630fdc8d8SChris Lattner return false; 39730fdc8d8SChris Lattner } 39830fdc8d8SChris Lattner 39930fdc8d8SChris Lattner 40030fdc8d8SChris Lattner bool 40130fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 40230fdc8d8SChris Lattner { 40330fdc8d8SChris Lattner if (arch_name) 40430fdc8d8SChris Lattner { 40530fdc8d8SChris Lattner ArchSpec arch (arch_name); 40630fdc8d8SChris Lattner if (arch.IsValid()) 40730fdc8d8SChris Lattner { 408daccaa9eSCaroline Tice lldb_private::Target::SetDefaultArchitecture (arch); 40930fdc8d8SChris Lattner return true; 41030fdc8d8SChris Lattner } 41130fdc8d8SChris Lattner } 41230fdc8d8SChris Lattner return false; 41330fdc8d8SChris Lattner } 41430fdc8d8SChris Lattner 41530fdc8d8SChris Lattner ScriptLanguage 41630fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 41730fdc8d8SChris Lattner { 41830fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 41930fdc8d8SChris Lattner eScriptLanguageDefault, 42030fdc8d8SChris Lattner NULL); 42130fdc8d8SChris Lattner } 42230fdc8d8SChris Lattner 42330fdc8d8SChris Lattner const char * 42430fdc8d8SChris Lattner SBDebugger::GetVersionString () 42530fdc8d8SChris Lattner { 42630fdc8d8SChris Lattner return lldb_private::GetVersion(); 42730fdc8d8SChris Lattner } 42830fdc8d8SChris Lattner 42930fdc8d8SChris Lattner const char * 43030fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state) 43130fdc8d8SChris Lattner { 43230fdc8d8SChris Lattner return lldb_private::StateAsCString (state); 43330fdc8d8SChris Lattner } 43430fdc8d8SChris Lattner 43530fdc8d8SChris Lattner bool 43630fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state) 43730fdc8d8SChris Lattner { 4382d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4394838131bSGreg Clayton 4404838131bSGreg Clayton const bool result = lldb_private::StateIsRunningState (state); 4414838131bSGreg Clayton if (log) 4424838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 4434838131bSGreg Clayton lldb_private::StateAsCString (state), result); 4444838131bSGreg Clayton 4454838131bSGreg Clayton return result; 44630fdc8d8SChris Lattner } 44730fdc8d8SChris Lattner 44830fdc8d8SChris Lattner bool 44930fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state) 45030fdc8d8SChris Lattner { 4512d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 452ceb6b139SCaroline Tice 4534838131bSGreg Clayton const bool result = lldb_private::StateIsStoppedState (state); 454ceb6b139SCaroline Tice if (log) 4554838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 4564838131bSGreg Clayton lldb_private::StateAsCString (state), result); 457ceb6b139SCaroline Tice 4584838131bSGreg Clayton return result; 45930fdc8d8SChris Lattner } 46030fdc8d8SChris Lattner 46130fdc8d8SChris Lattner 46230fdc8d8SChris Lattner SBTarget 46330fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 46430fdc8d8SChris Lattner const char *target_triple) 46530fdc8d8SChris Lattner { 4666611103cSGreg Clayton SBTarget target; 4676611103cSGreg Clayton if (m_opaque_sp) 4686611103cSGreg Clayton { 46930fdc8d8SChris Lattner ArchSpec arch; 470274060b6SGreg Clayton FileSpec file_spec (filename, true); 47130fdc8d8SChris Lattner arch.SetArchFromTargetTriple(target_triple); 47230fdc8d8SChris Lattner TargetSP target_sp; 4736611103cSGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, NULL, true, target_sp)); 4746611103cSGreg Clayton target.reset (target_sp); 4756611103cSGreg Clayton } 4764838131bSGreg Clayton 4772d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4784838131bSGreg Clayton if (log) 4794838131bSGreg Clayton { 480cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 4814838131bSGreg Clayton m_opaque_sp.get(), filename, target_triple, target.get()); 4824838131bSGreg Clayton } 4834838131bSGreg Clayton 48430fdc8d8SChris Lattner return target; 48530fdc8d8SChris Lattner } 48630fdc8d8SChris Lattner 48730fdc8d8SChris Lattner SBTarget 48830fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *archname) 48930fdc8d8SChris Lattner { 4902d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 491ceb6b139SCaroline Tice 4926611103cSGreg Clayton SBTarget target; 4936611103cSGreg Clayton if (m_opaque_sp) 4946611103cSGreg Clayton { 495274060b6SGreg Clayton FileSpec file (filename, true); 496daccaa9eSCaroline Tice ArchSpec arch = lldb_private::Target::GetDefaultArchitecture (); 49730fdc8d8SChris Lattner TargetSP target_sp; 49830fdc8d8SChris Lattner Error error; 49930fdc8d8SChris Lattner 50030fdc8d8SChris Lattner if (archname != NULL) 50130fdc8d8SChris Lattner { 50230fdc8d8SChris Lattner ArchSpec arch2 (archname); 5036611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch2, NULL, true, target_sp); 50430fdc8d8SChris Lattner } 50530fdc8d8SChris Lattner else 50630fdc8d8SChris Lattner { 50730fdc8d8SChris Lattner if (!arch.IsValid()) 50830fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT; 50930fdc8d8SChris Lattner 5106611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 51130fdc8d8SChris Lattner 51230fdc8d8SChris Lattner if (error.Fail()) 51330fdc8d8SChris Lattner { 51430fdc8d8SChris Lattner if (arch == LLDB_ARCH_DEFAULT_32BIT) 51530fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_64BIT; 51630fdc8d8SChris Lattner else 51730fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_32BIT; 51830fdc8d8SChris Lattner 5196611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 52030fdc8d8SChris Lattner } 52130fdc8d8SChris Lattner } 52230fdc8d8SChris Lattner 52330fdc8d8SChris Lattner if (error.Success()) 5246611103cSGreg Clayton { 5252976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5266611103cSGreg Clayton target.reset(target_sp); 5276611103cSGreg Clayton } 5286611103cSGreg Clayton } 529ceb6b139SCaroline Tice 530ceb6b139SCaroline Tice if (log) 531ceb6b139SCaroline Tice { 532cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 5334838131bSGreg Clayton m_opaque_sp.get(), filename, archname, target.get()); 534ceb6b139SCaroline Tice } 535ceb6b139SCaroline Tice 5366611103cSGreg Clayton return target; 53730fdc8d8SChris Lattner } 53830fdc8d8SChris Lattner 53930fdc8d8SChris Lattner SBTarget 54030fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 54130fdc8d8SChris Lattner { 5426611103cSGreg Clayton SBTarget target; 5436611103cSGreg Clayton if (m_opaque_sp) 5446611103cSGreg Clayton { 545274060b6SGreg Clayton FileSpec file (filename, true); 546daccaa9eSCaroline Tice ArchSpec arch = lldb_private::Target::GetDefaultArchitecture (); 54730fdc8d8SChris Lattner TargetSP target_sp; 54830fdc8d8SChris Lattner Error error; 54930fdc8d8SChris Lattner 55030fdc8d8SChris Lattner if (!arch.IsValid()) 55130fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT; 55230fdc8d8SChris Lattner 5536611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 55430fdc8d8SChris Lattner 55530fdc8d8SChris Lattner if (error.Fail()) 55630fdc8d8SChris Lattner { 55730fdc8d8SChris Lattner if (arch == LLDB_ARCH_DEFAULT_32BIT) 55830fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_64BIT; 55930fdc8d8SChris Lattner else 56030fdc8d8SChris Lattner arch = LLDB_ARCH_DEFAULT_32BIT; 56130fdc8d8SChris Lattner 5626611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 56330fdc8d8SChris Lattner } 56430fdc8d8SChris Lattner 5656611103cSGreg Clayton if (error.Success()) 5666611103cSGreg Clayton { 5672976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5686611103cSGreg Clayton target.reset (target_sp); 5696611103cSGreg Clayton } 5706611103cSGreg Clayton } 5712d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5724838131bSGreg Clayton if (log) 5734838131bSGreg Clayton { 574cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 5754838131bSGreg Clayton m_opaque_sp.get(), filename, target.get()); 5764838131bSGreg Clayton } 5776611103cSGreg Clayton return target; 57830fdc8d8SChris Lattner } 57930fdc8d8SChris Lattner 58030fdc8d8SChris Lattner SBTarget 58130fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 58230fdc8d8SChris Lattner { 5836611103cSGreg Clayton SBTarget sb_target; 5846611103cSGreg Clayton if (m_opaque_sp) 5856611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 58630fdc8d8SChris Lattner return sb_target; 58730fdc8d8SChris Lattner } 58830fdc8d8SChris Lattner 58930fdc8d8SChris Lattner SBTarget 59030fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 59130fdc8d8SChris Lattner { 5926611103cSGreg Clayton SBTarget sb_target; 5936611103cSGreg Clayton if (m_opaque_sp) 5946611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 59530fdc8d8SChris Lattner return sb_target; 59630fdc8d8SChris Lattner } 59730fdc8d8SChris Lattner 59830fdc8d8SChris Lattner SBTarget 59930fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 60030fdc8d8SChris Lattner { 6016611103cSGreg Clayton SBTarget sb_target; 6026611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 6036611103cSGreg Clayton { 60430fdc8d8SChris Lattner ArchSpec arch; 60530fdc8d8SChris Lattner if (arch_name) 60630fdc8d8SChris Lattner arch.SetArch(arch_name); 607274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 6086611103cSGreg Clayton sb_target.reset(target_sp); 6096611103cSGreg Clayton } 6106611103cSGreg Clayton return sb_target; 61130fdc8d8SChris Lattner } 61230fdc8d8SChris Lattner 61330fdc8d8SChris Lattner SBTarget 61430fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp) 61530fdc8d8SChris Lattner { 6166611103cSGreg Clayton SBTarget sb_target; 6176611103cSGreg Clayton if (m_opaque_sp) 6186611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 61930fdc8d8SChris Lattner return sb_target; 62030fdc8d8SChris Lattner } 62130fdc8d8SChris Lattner 62230fdc8d8SChris Lattner 62330fdc8d8SChris Lattner uint32_t 62430fdc8d8SChris Lattner SBDebugger::GetNumTargets () 62530fdc8d8SChris Lattner { 6266611103cSGreg Clayton if (m_opaque_sp) 6276611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 6286611103cSGreg Clayton return 0; 6296611103cSGreg Clayton } 63030fdc8d8SChris Lattner 63130fdc8d8SChris Lattner SBTarget 6322976d00aSJim Ingham SBDebugger::GetSelectedTarget () 63330fdc8d8SChris Lattner { 6342d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 635ceb6b139SCaroline Tice 6366611103cSGreg Clayton SBTarget sb_target; 6376611103cSGreg Clayton if (m_opaque_sp) 6382976d00aSJim Ingham sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ()); 639ceb6b139SCaroline Tice 640ceb6b139SCaroline Tice if (log) 641ceb6b139SCaroline Tice { 642ceb6b139SCaroline Tice SBStream sstr; 643ceb6b139SCaroline Tice sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief); 64493aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 645750cd175SCaroline Tice sb_target.get(), sstr.GetData()); 646ceb6b139SCaroline Tice } 647ceb6b139SCaroline Tice 64830fdc8d8SChris Lattner return sb_target; 64930fdc8d8SChris Lattner } 65030fdc8d8SChris Lattner 65130fdc8d8SChris Lattner void 65230fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 65330fdc8d8SChris Lattner { 6542d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 655ceb6b139SCaroline Tice 656ceb6b139SCaroline Tice if (log) 657cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(), 658cfd1acedSGreg Clayton baton, (int) data_len, (const char *) data, data_len); 659ceb6b139SCaroline Tice 6606611103cSGreg Clayton if (m_opaque_sp) 6616611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 66230fdc8d8SChris Lattner } 66330fdc8d8SChris Lattner 66430fdc8d8SChris Lattner void 665efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 666efed6131SCaroline Tice { 667efed6131SCaroline Tice if (m_opaque_sp) 668efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 669efed6131SCaroline Tice } 670efed6131SCaroline Tice 671efed6131SCaroline Tice void 672efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 673efed6131SCaroline Tice { 674efed6131SCaroline Tice if (m_opaque_sp) 675efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 676efed6131SCaroline Tice } 677efed6131SCaroline Tice 678efed6131SCaroline Tice void 67930fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 68030fdc8d8SChris Lattner { 6812d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 682ceb6b139SCaroline Tice 683ceb6b139SCaroline Tice if (log) 68493aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 685ceb6b139SCaroline Tice 6866611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 68730fdc8d8SChris Lattner { 68830fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 6896611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 69030fdc8d8SChris Lattner } 69130fdc8d8SChris Lattner } 6926611103cSGreg Clayton 6936611103cSGreg Clayton void 6946611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp) 6956611103cSGreg Clayton { 6966611103cSGreg Clayton m_opaque_sp = debugger_sp; 6976611103cSGreg Clayton } 6986611103cSGreg Clayton 6996611103cSGreg Clayton Debugger * 7006611103cSGreg Clayton SBDebugger::get () const 7016611103cSGreg Clayton { 7026611103cSGreg Clayton return m_opaque_sp.get(); 7036611103cSGreg Clayton } 7046611103cSGreg Clayton 7056611103cSGreg Clayton Debugger & 7066611103cSGreg Clayton SBDebugger::ref () const 7076611103cSGreg Clayton { 7086611103cSGreg Clayton assert (m_opaque_sp.get()); 7096611103cSGreg Clayton return *m_opaque_sp; 7106611103cSGreg Clayton } 7116611103cSGreg Clayton 7126611103cSGreg Clayton 713ebc1bb27SCaroline Tice SBDebugger 714ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 715ebc1bb27SCaroline Tice { 716ebc1bb27SCaroline Tice SBDebugger sb_debugger; 717ebc1bb27SCaroline Tice lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 718ebc1bb27SCaroline Tice if (debugger_sp) 719ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 720ebc1bb27SCaroline Tice return sb_debugger; 721ebc1bb27SCaroline Tice } 722e40e4218SJim Ingham 723dd759857SCaroline Tice const char * 724dd759857SCaroline Tice SBDebugger::GetInstanceName() 725dd759857SCaroline Tice { 726dd759857SCaroline Tice if (m_opaque_sp) 727dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 728dd759857SCaroline Tice else 729dd759857SCaroline Tice return NULL; 730dd759857SCaroline Tice } 731dd759857SCaroline Tice 7323df9a8dfSCaroline Tice SBError 733dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 7343df9a8dfSCaroline Tice { 7353df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7363df9a8dfSCaroline Tice 7371559a46bSCaroline Tice Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true, 738101c7c20SCaroline Tice debugger_instance_name); 7393df9a8dfSCaroline Tice SBError sb_error; 7403df9a8dfSCaroline Tice sb_error.SetError (err); 7413df9a8dfSCaroline Tice 7423df9a8dfSCaroline Tice return sb_error; 7433df9a8dfSCaroline Tice } 7443df9a8dfSCaroline Tice 7453df9a8dfSCaroline Tice lldb::SBStringList 746dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 7473df9a8dfSCaroline Tice { 7483df9a8dfSCaroline Tice SBStringList ret_value; 749101c7c20SCaroline Tice lldb::SettableVariableType var_type; 750*508265afSJohnny Chen lldb_private::Error err; 751101c7c20SCaroline Tice 7523df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7533df9a8dfSCaroline Tice 754daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 755daccaa9eSCaroline Tice 756daccaa9eSCaroline Tice if (err.Success()) 757daccaa9eSCaroline Tice { 758311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 7593df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 760daccaa9eSCaroline Tice } 761daccaa9eSCaroline Tice else 762daccaa9eSCaroline Tice { 763daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 764daccaa9eSCaroline Tice } 765daccaa9eSCaroline Tice 7663df9a8dfSCaroline Tice 7673df9a8dfSCaroline Tice return ret_value; 7683df9a8dfSCaroline Tice } 7693df9a8dfSCaroline Tice 770a7015092SGreg Clayton uint32_t 771a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 772a7015092SGreg Clayton { 773a7015092SGreg Clayton if (m_opaque_sp) 774a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 775a7015092SGreg Clayton return 0; 776a7015092SGreg Clayton } 777a7015092SGreg Clayton 778a7015092SGreg Clayton void 779a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 780a7015092SGreg Clayton { 781a7015092SGreg Clayton if (m_opaque_sp) 782a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 783a7015092SGreg Clayton } 784a7015092SGreg Clayton 785a7015092SGreg Clayton const char * 786a7015092SGreg Clayton SBDebugger::GetPrompt() const 787a7015092SGreg Clayton { 7882d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 789ceb6b139SCaroline Tice 790ceb6b139SCaroline Tice if (log) 791cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 792750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 793ceb6b139SCaroline Tice 794a7015092SGreg Clayton if (m_opaque_sp) 795a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 796a7015092SGreg Clayton return 0; 797a7015092SGreg Clayton } 798a7015092SGreg Clayton 799a7015092SGreg Clayton void 800a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 801a7015092SGreg Clayton { 802a7015092SGreg Clayton if (m_opaque_sp) 803a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 804a7015092SGreg Clayton } 805a7015092SGreg Clayton 806a7015092SGreg Clayton 807a7015092SGreg Clayton lldb::ScriptLanguage 808a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 809a7015092SGreg Clayton { 810a7015092SGreg Clayton if (m_opaque_sp) 811a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 812a7015092SGreg Clayton return eScriptLanguageNone; 813a7015092SGreg Clayton } 814a7015092SGreg Clayton 815a7015092SGreg Clayton void 816a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang) 817a7015092SGreg Clayton { 818a7015092SGreg Clayton if (m_opaque_sp) 819a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 820a7015092SGreg Clayton } 821a7015092SGreg Clayton 822a7015092SGreg Clayton 823a7015092SGreg Clayton 824a7015092SGreg Clayton 825e40e4218SJim Ingham bool 826e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 827e40e4218SJim Ingham { 828e40e4218SJim Ingham if (m_opaque_sp) 829e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 830e40e4218SJim Ingham else 831e40e4218SJim Ingham return false; 832e40e4218SJim Ingham } 833e40e4218SJim Ingham 834e40e4218SJim Ingham bool 835daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 836e40e4218SJim Ingham { 837e40e4218SJim Ingham if (m_opaque_sp) 838daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 839e40e4218SJim Ingham else 840e40e4218SJim Ingham return false; 841e40e4218SJim Ingham } 842e40e4218SJim Ingham 843dde9cff3SCaroline Tice bool 844dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 845dde9cff3SCaroline Tice { 846dde9cff3SCaroline Tice if (m_opaque_sp) 847dde9cff3SCaroline Tice { 848dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 849dde9cff3SCaroline Tice lldb::user_id_t id = m_opaque_sp->GetID(); 850cfd1acedSGreg Clayton description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id); 851dde9cff3SCaroline Tice } 852dde9cff3SCaroline Tice else 853dde9cff3SCaroline Tice description.Printf ("No value"); 854dde9cff3SCaroline Tice 855dde9cff3SCaroline Tice return true; 856dde9cff3SCaroline Tice } 857efed6131SCaroline Tice 858efed6131SCaroline Tice lldb::user_id_t 859efed6131SCaroline Tice SBDebugger::GetID() 860efed6131SCaroline Tice { 861efed6131SCaroline Tice if (m_opaque_sp) 862efed6131SCaroline Tice return m_opaque_sp->GetID(); 863efed6131SCaroline Tice return LLDB_INVALID_UID; 864efed6131SCaroline Tice } 865