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 86e02657b1SCaroline Tice void 87e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger) 88e02657b1SCaroline Tice { 89e02657b1SCaroline Tice LogSP log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 90e02657b1SCaroline Tice 91e02657b1SCaroline Tice if (log) 92e02657b1SCaroline Tice { 93e02657b1SCaroline Tice SBStream sstr; 94e02657b1SCaroline Tice debugger.GetDescription (sstr); 95e02657b1SCaroline Tice log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 96e02657b1SCaroline Tice } 97e02657b1SCaroline Tice 98e02657b1SCaroline Tice Debugger::Destroy (debugger.m_opaque_sp); 99e02657b1SCaroline Tice 100e02657b1SCaroline Tice if (debugger.m_opaque_sp.get() != NULL) 101e02657b1SCaroline Tice debugger.m_opaque_sp.reset(); 102e02657b1SCaroline Tice } 103e02657b1SCaroline Tice 1046611103cSGreg Clayton SBDebugger::SBDebugger () : 1056611103cSGreg Clayton m_opaque_sp () 1066611103cSGreg Clayton { 1076611103cSGreg Clayton } 1086611103cSGreg Clayton 109efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 110efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 111efabb123SGreg Clayton { 112efabb123SGreg Clayton } 113efabb123SGreg Clayton 114efabb123SGreg Clayton SBDebugger & 115efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 116efabb123SGreg Clayton { 117efabb123SGreg Clayton if (this != &rhs) 118efabb123SGreg Clayton { 119efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 120efabb123SGreg Clayton } 121efabb123SGreg Clayton return *this; 122efabb123SGreg Clayton } 123efabb123SGreg Clayton 1246611103cSGreg Clayton SBDebugger::~SBDebugger () 1256611103cSGreg Clayton { 1266611103cSGreg Clayton } 1276611103cSGreg Clayton 1286611103cSGreg Clayton bool 1296611103cSGreg Clayton SBDebugger::IsValid() const 1306611103cSGreg Clayton { 1316611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1326611103cSGreg Clayton } 1336611103cSGreg Clayton 1346611103cSGreg Clayton 13530fdc8d8SChris Lattner void 13630fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 13730fdc8d8SChris Lattner { 1386611103cSGreg Clayton if (m_opaque_sp) 1396611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 14030fdc8d8SChris Lattner } 14130fdc8d8SChris Lattner 1426eee5aa0SGreg Clayton void 1436eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 1446eee5aa0SGreg Clayton { 1456eee5aa0SGreg Clayton if (m_opaque_sp) 1466eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 1476eee5aa0SGreg Clayton } 1486eee5aa0SGreg Clayton 14930fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 15030fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 15130fdc8d8SChris Lattner void 15230fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 15330fdc8d8SChris Lattner { 1542d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 155ceb6b139SCaroline Tice 156ceb6b139SCaroline Tice if (log) 157cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 158cfd1acedSGreg Clayton fh, transfer_ownership); 159ceb6b139SCaroline Tice 1606611103cSGreg Clayton if (m_opaque_sp) 1616611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 16230fdc8d8SChris Lattner } 16330fdc8d8SChris Lattner 16430fdc8d8SChris Lattner void 16530fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 16630fdc8d8SChris Lattner { 1672d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 168ceb6b139SCaroline Tice 169ceb6b139SCaroline Tice 170ceb6b139SCaroline Tice if (log) 171cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 172cfd1acedSGreg Clayton fh, transfer_ownership); 173ceb6b139SCaroline Tice 1746611103cSGreg Clayton if (m_opaque_sp) 1756611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 17630fdc8d8SChris Lattner } 17730fdc8d8SChris Lattner 17830fdc8d8SChris Lattner void 17930fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 18030fdc8d8SChris Lattner { 1812d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 182ceb6b139SCaroline Tice 183ceb6b139SCaroline Tice 184ceb6b139SCaroline Tice if (log) 185cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 186cfd1acedSGreg Clayton fh, transfer_ownership); 187ceb6b139SCaroline Tice 1886611103cSGreg Clayton if (m_opaque_sp) 1896611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 19030fdc8d8SChris Lattner } 19130fdc8d8SChris Lattner 19230fdc8d8SChris Lattner FILE * 19330fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 19430fdc8d8SChris Lattner { 1956611103cSGreg Clayton if (m_opaque_sp) 19651b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 1976611103cSGreg Clayton return NULL; 19830fdc8d8SChris Lattner } 19930fdc8d8SChris Lattner 20030fdc8d8SChris Lattner FILE * 20130fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 20230fdc8d8SChris Lattner { 2036611103cSGreg Clayton if (m_opaque_sp) 20451b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2056611103cSGreg Clayton return NULL; 20630fdc8d8SChris Lattner } 20730fdc8d8SChris Lattner 20830fdc8d8SChris Lattner FILE * 20930fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 21030fdc8d8SChris Lattner { 2116611103cSGreg Clayton if (m_opaque_sp) 21251b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2136611103cSGreg Clayton return NULL; 21430fdc8d8SChris Lattner } 21530fdc8d8SChris Lattner 21630fdc8d8SChris Lattner SBCommandInterpreter 21730fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 21830fdc8d8SChris Lattner { 2192d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 220ceb6b139SCaroline Tice 2216611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 2226611103cSGreg Clayton if (m_opaque_sp) 2236611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 224ceb6b139SCaroline Tice 225750cd175SCaroline Tice if (log) 22693aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 227750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 228750cd175SCaroline Tice 22930fdc8d8SChris Lattner return sb_interpreter; 23030fdc8d8SChris Lattner } 23130fdc8d8SChris Lattner 23230fdc8d8SChris Lattner void 23330fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 23430fdc8d8SChris Lattner { 2356611103cSGreg Clayton if (m_opaque_sp) 2366611103cSGreg Clayton { 237af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 238af67cecdSGreg Clayton Mutex::Locker api_locker; 239af67cecdSGreg Clayton if (target_sp) 240af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 241af67cecdSGreg Clayton 2426611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 24330fdc8d8SChris Lattner SBCommandReturnObject result; 24430fdc8d8SChris Lattner 24530fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 24630fdc8d8SChris Lattner 24730fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 24830fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 24930fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 25030fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 25130fdc8d8SChris Lattner 2526611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 25330fdc8d8SChris Lattner { 2546611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 25530fdc8d8SChris Lattner if (process.IsValid()) 25630fdc8d8SChris Lattner { 25730fdc8d8SChris Lattner EventSP event_sp; 2586611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 25930fdc8d8SChris Lattner while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp)) 26030fdc8d8SChris Lattner { 26130fdc8d8SChris Lattner SBEvent event(event_sp); 26230fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 26330fdc8d8SChris Lattner } 26430fdc8d8SChris Lattner } 26530fdc8d8SChris Lattner } 26630fdc8d8SChris Lattner } 2676611103cSGreg Clayton } 26830fdc8d8SChris Lattner 26930fdc8d8SChris Lattner SBListener 27030fdc8d8SChris Lattner SBDebugger::GetListener () 27130fdc8d8SChris Lattner { 2722d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 273ceb6b139SCaroline Tice 2746611103cSGreg Clayton SBListener sb_listener; 2756611103cSGreg Clayton if (m_opaque_sp) 2766611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 277ceb6b139SCaroline Tice 278750cd175SCaroline Tice if (log) 27993aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 280750cd175SCaroline Tice sb_listener.get()); 281750cd175SCaroline Tice 28230fdc8d8SChris Lattner return sb_listener; 28330fdc8d8SChris Lattner } 28430fdc8d8SChris Lattner 28530fdc8d8SChris Lattner void 28630fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 28730fdc8d8SChris Lattner { 288af67cecdSGreg Clayton if (!process.IsValid()) 289af67cecdSGreg Clayton return; 290af67cecdSGreg Clayton 29130fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 29230fdc8d8SChris Lattner char stdio_buffer[1024]; 29330fdc8d8SChris Lattner size_t len; 29430fdc8d8SChris Lattner 295af67cecdSGreg Clayton Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex()); 296af67cecdSGreg Clayton 297af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 29830fdc8d8SChris Lattner { 299af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 30030fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 30130fdc8d8SChris Lattner if (out != NULL) 30230fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 30330fdc8d8SChris Lattner } 304af67cecdSGreg Clayton 305af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 30630fdc8d8SChris Lattner { 307af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 30830fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 309af67cecdSGreg Clayton if (err != NULL) 310af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 31130fdc8d8SChris Lattner } 312af67cecdSGreg Clayton 313af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 31430fdc8d8SChris Lattner { 31530fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 31630fdc8d8SChris Lattner 31730fdc8d8SChris Lattner if (event_state == eStateInvalid) 31830fdc8d8SChris Lattner return; 31930fdc8d8SChris Lattner 32030fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 32130fdc8d8SChris Lattner if (!is_stopped) 3222976d00aSJim Ingham process.ReportEventState (event, out); 32330fdc8d8SChris Lattner } 32430fdc8d8SChris Lattner } 32530fdc8d8SChris Lattner 32630fdc8d8SChris Lattner SBSourceManager & 32730fdc8d8SChris Lattner SBDebugger::GetSourceManager () 32830fdc8d8SChris Lattner { 32930fdc8d8SChris Lattner static SourceManager g_lldb_source_manager; 330efabb123SGreg Clayton static SBSourceManager g_sb_source_manager (&g_lldb_source_manager); 33130fdc8d8SChris Lattner return g_sb_source_manager; 33230fdc8d8SChris Lattner } 33330fdc8d8SChris Lattner 33430fdc8d8SChris Lattner 33530fdc8d8SChris Lattner bool 33630fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 33730fdc8d8SChris Lattner { 33830fdc8d8SChris Lattner if (arch_name && arch_name_len) 33930fdc8d8SChris Lattner { 340daccaa9eSCaroline Tice ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture (); 341daccaa9eSCaroline Tice 34230fdc8d8SChris Lattner if (default_arch.IsValid()) 34330fdc8d8SChris Lattner { 344*64195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 34530fdc8d8SChris Lattner return true; 34630fdc8d8SChris Lattner } 34730fdc8d8SChris Lattner } 34830fdc8d8SChris Lattner if (arch_name && arch_name_len) 34930fdc8d8SChris Lattner arch_name[0] = '\0'; 35030fdc8d8SChris Lattner return false; 35130fdc8d8SChris Lattner } 35230fdc8d8SChris Lattner 35330fdc8d8SChris Lattner 35430fdc8d8SChris Lattner bool 35530fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 35630fdc8d8SChris Lattner { 35730fdc8d8SChris Lattner if (arch_name) 35830fdc8d8SChris Lattner { 35930fdc8d8SChris Lattner ArchSpec arch (arch_name); 36030fdc8d8SChris Lattner if (arch.IsValid()) 36130fdc8d8SChris Lattner { 362daccaa9eSCaroline Tice lldb_private::Target::SetDefaultArchitecture (arch); 36330fdc8d8SChris Lattner return true; 36430fdc8d8SChris Lattner } 36530fdc8d8SChris Lattner } 36630fdc8d8SChris Lattner return false; 36730fdc8d8SChris Lattner } 36830fdc8d8SChris Lattner 36930fdc8d8SChris Lattner ScriptLanguage 37030fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 37130fdc8d8SChris Lattner { 372af67cecdSGreg Clayton 37330fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 37430fdc8d8SChris Lattner eScriptLanguageDefault, 37530fdc8d8SChris Lattner NULL); 37630fdc8d8SChris Lattner } 37730fdc8d8SChris Lattner 37830fdc8d8SChris Lattner const char * 37930fdc8d8SChris Lattner SBDebugger::GetVersionString () 38030fdc8d8SChris Lattner { 38130fdc8d8SChris Lattner return lldb_private::GetVersion(); 38230fdc8d8SChris Lattner } 38330fdc8d8SChris Lattner 38430fdc8d8SChris Lattner const char * 38530fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state) 38630fdc8d8SChris Lattner { 38730fdc8d8SChris Lattner return lldb_private::StateAsCString (state); 38830fdc8d8SChris Lattner } 38930fdc8d8SChris Lattner 39030fdc8d8SChris Lattner bool 39130fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state) 39230fdc8d8SChris Lattner { 3932d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3944838131bSGreg Clayton 3954838131bSGreg Clayton const bool result = lldb_private::StateIsRunningState (state); 3964838131bSGreg Clayton if (log) 3974838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 3984838131bSGreg Clayton lldb_private::StateAsCString (state), result); 3994838131bSGreg Clayton 4004838131bSGreg Clayton return result; 40130fdc8d8SChris Lattner } 40230fdc8d8SChris Lattner 40330fdc8d8SChris Lattner bool 40430fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state) 40530fdc8d8SChris Lattner { 4062d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 407ceb6b139SCaroline Tice 4084838131bSGreg Clayton const bool result = lldb_private::StateIsStoppedState (state); 409ceb6b139SCaroline Tice if (log) 4104838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 4114838131bSGreg Clayton lldb_private::StateAsCString (state), result); 412ceb6b139SCaroline Tice 4134838131bSGreg Clayton return result; 41430fdc8d8SChris Lattner } 41530fdc8d8SChris Lattner 41630fdc8d8SChris Lattner 41730fdc8d8SChris Lattner SBTarget 41830fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 41930fdc8d8SChris Lattner const char *target_triple) 42030fdc8d8SChris Lattner { 4216611103cSGreg Clayton SBTarget target; 4226611103cSGreg Clayton if (m_opaque_sp) 4236611103cSGreg Clayton { 42430fdc8d8SChris Lattner ArchSpec arch; 425274060b6SGreg Clayton FileSpec file_spec (filename, true); 426*64195a2cSGreg Clayton arch.SetTriple (target_triple); 42730fdc8d8SChris Lattner TargetSP target_sp; 4286611103cSGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, NULL, true, target_sp)); 4296611103cSGreg Clayton target.reset (target_sp); 4306611103cSGreg Clayton } 4314838131bSGreg Clayton 4322d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4334838131bSGreg Clayton if (log) 4344838131bSGreg Clayton { 435cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 4364838131bSGreg Clayton m_opaque_sp.get(), filename, target_triple, target.get()); 4374838131bSGreg Clayton } 4384838131bSGreg Clayton 43930fdc8d8SChris Lattner return target; 44030fdc8d8SChris Lattner } 44130fdc8d8SChris Lattner 44230fdc8d8SChris Lattner SBTarget 443*64195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 44430fdc8d8SChris Lattner { 4452d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 446ceb6b139SCaroline Tice 4476611103cSGreg Clayton SBTarget target; 4486611103cSGreg Clayton if (m_opaque_sp) 4496611103cSGreg Clayton { 450274060b6SGreg Clayton FileSpec file (filename, true); 451*64195a2cSGreg Clayton ArchSpec arch; 45230fdc8d8SChris Lattner TargetSP target_sp; 45330fdc8d8SChris Lattner Error error; 45430fdc8d8SChris Lattner 455*64195a2cSGreg Clayton if (arch_cstr) 456*64195a2cSGreg Clayton arch.SetTriple (arch_cstr); 45730fdc8d8SChris Lattner else 458*64195a2cSGreg Clayton arch = lldb_private::Target::GetDefaultArchitecture (); 459*64195a2cSGreg Clayton 46030fdc8d8SChris Lattner if (!arch.IsValid()) 461*64195a2cSGreg Clayton arch.SetTriple (LLDB_ARCH_DEFAULT); 46230fdc8d8SChris Lattner 4636611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 46430fdc8d8SChris Lattner 46530fdc8d8SChris Lattner if (error.Fail()) 46630fdc8d8SChris Lattner { 467*64195a2cSGreg Clayton if (strcmp (LLDB_ARCH_DEFAULT, LLDB_ARCH_DEFAULT_32BIT) == 0) 468*64195a2cSGreg Clayton arch.SetTriple (LLDB_ARCH_DEFAULT_64BIT); 46930fdc8d8SChris Lattner else 470*64195a2cSGreg Clayton arch.SetTriple (LLDB_ARCH_DEFAULT_32BIT); 47130fdc8d8SChris Lattner 4726611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 47330fdc8d8SChris Lattner } 47430fdc8d8SChris Lattner 47530fdc8d8SChris Lattner if (error.Success()) 4766611103cSGreg Clayton { 4772976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 4786611103cSGreg Clayton target.reset(target_sp); 4796611103cSGreg Clayton } 4806611103cSGreg Clayton } 481ceb6b139SCaroline Tice 482ceb6b139SCaroline Tice if (log) 483ceb6b139SCaroline Tice { 484cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 485*64195a2cSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target.get()); 486ceb6b139SCaroline Tice } 487ceb6b139SCaroline Tice 4886611103cSGreg Clayton return target; 48930fdc8d8SChris Lattner } 49030fdc8d8SChris Lattner 49130fdc8d8SChris Lattner SBTarget 49230fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 49330fdc8d8SChris Lattner { 4946611103cSGreg Clayton SBTarget target; 4956611103cSGreg Clayton if (m_opaque_sp) 4966611103cSGreg Clayton { 497274060b6SGreg Clayton FileSpec file (filename, true); 498daccaa9eSCaroline Tice ArchSpec arch = lldb_private::Target::GetDefaultArchitecture (); 49930fdc8d8SChris Lattner TargetSP target_sp; 50030fdc8d8SChris Lattner Error error; 50130fdc8d8SChris Lattner 50230fdc8d8SChris Lattner if (!arch.IsValid()) 503*64195a2cSGreg Clayton arch.SetTriple (LLDB_ARCH_DEFAULT); 50430fdc8d8SChris Lattner 5056611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 50630fdc8d8SChris Lattner 50730fdc8d8SChris Lattner if (error.Fail()) 50830fdc8d8SChris Lattner { 509*64195a2cSGreg Clayton if (strcmp (LLDB_ARCH_DEFAULT, LLDB_ARCH_DEFAULT_32BIT) == 0) 510*64195a2cSGreg Clayton arch.SetTriple (LLDB_ARCH_DEFAULT_64BIT); 51130fdc8d8SChris Lattner else 512*64195a2cSGreg Clayton arch.SetTriple (LLDB_ARCH_DEFAULT_32BIT); 51330fdc8d8SChris Lattner 5146611103cSGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp); 51530fdc8d8SChris Lattner } 51630fdc8d8SChris Lattner 5176611103cSGreg Clayton if (error.Success()) 5186611103cSGreg Clayton { 5192976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5206611103cSGreg Clayton target.reset (target_sp); 5216611103cSGreg Clayton } 5226611103cSGreg Clayton } 5232d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5244838131bSGreg Clayton if (log) 5254838131bSGreg Clayton { 526cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 5274838131bSGreg Clayton m_opaque_sp.get(), filename, target.get()); 5284838131bSGreg Clayton } 5296611103cSGreg Clayton return target; 53030fdc8d8SChris Lattner } 53130fdc8d8SChris Lattner 53230fdc8d8SChris Lattner SBTarget 53330fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 53430fdc8d8SChris Lattner { 5356611103cSGreg Clayton SBTarget sb_target; 5366611103cSGreg Clayton if (m_opaque_sp) 537af67cecdSGreg Clayton { 538af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5396611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 540af67cecdSGreg Clayton } 54130fdc8d8SChris Lattner return sb_target; 54230fdc8d8SChris Lattner } 54330fdc8d8SChris Lattner 54430fdc8d8SChris Lattner SBTarget 54530fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 54630fdc8d8SChris Lattner { 5476611103cSGreg Clayton SBTarget sb_target; 5486611103cSGreg Clayton if (m_opaque_sp) 549af67cecdSGreg Clayton { 550af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5516611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 552af67cecdSGreg Clayton } 55330fdc8d8SChris Lattner return sb_target; 55430fdc8d8SChris Lattner } 55530fdc8d8SChris Lattner 55630fdc8d8SChris Lattner SBTarget 55730fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 55830fdc8d8SChris Lattner { 5596611103cSGreg Clayton SBTarget sb_target; 5606611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 5616611103cSGreg Clayton { 562af67cecdSGreg Clayton // No need to lock, the target list is thread safe 563*64195a2cSGreg Clayton ArchSpec arch (arch_name); 564274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 5656611103cSGreg Clayton sb_target.reset(target_sp); 5666611103cSGreg Clayton } 5676611103cSGreg Clayton return sb_target; 56830fdc8d8SChris Lattner } 56930fdc8d8SChris Lattner 57030fdc8d8SChris Lattner SBTarget 57130fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp) 57230fdc8d8SChris Lattner { 5736611103cSGreg Clayton SBTarget sb_target; 5746611103cSGreg Clayton if (m_opaque_sp) 575af67cecdSGreg Clayton { 576af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5776611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 578af67cecdSGreg Clayton } 57930fdc8d8SChris Lattner return sb_target; 58030fdc8d8SChris Lattner } 58130fdc8d8SChris Lattner 58230fdc8d8SChris Lattner 58330fdc8d8SChris Lattner uint32_t 58430fdc8d8SChris Lattner SBDebugger::GetNumTargets () 58530fdc8d8SChris Lattner { 5866611103cSGreg Clayton if (m_opaque_sp) 587af67cecdSGreg Clayton { 588af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5896611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 590af67cecdSGreg Clayton } 5916611103cSGreg Clayton return 0; 5926611103cSGreg Clayton } 59330fdc8d8SChris Lattner 59430fdc8d8SChris Lattner SBTarget 5952976d00aSJim Ingham SBDebugger::GetSelectedTarget () 59630fdc8d8SChris Lattner { 5972d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 598ceb6b139SCaroline Tice 5996611103cSGreg Clayton SBTarget sb_target; 6006611103cSGreg Clayton if (m_opaque_sp) 601af67cecdSGreg Clayton { 602af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6032976d00aSJim Ingham sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ()); 604af67cecdSGreg Clayton } 605ceb6b139SCaroline Tice 606ceb6b139SCaroline Tice if (log) 607ceb6b139SCaroline Tice { 608ceb6b139SCaroline Tice SBStream sstr; 609ceb6b139SCaroline Tice sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief); 61093aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 611750cd175SCaroline Tice sb_target.get(), sstr.GetData()); 612ceb6b139SCaroline Tice } 613ceb6b139SCaroline Tice 61430fdc8d8SChris Lattner return sb_target; 61530fdc8d8SChris Lattner } 61630fdc8d8SChris Lattner 61730fdc8d8SChris Lattner void 61830fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 61930fdc8d8SChris Lattner { 6202d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 621ceb6b139SCaroline Tice 622ceb6b139SCaroline Tice if (log) 623cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(), 624cfd1acedSGreg Clayton baton, (int) data_len, (const char *) data, data_len); 625ceb6b139SCaroline Tice 6266611103cSGreg Clayton if (m_opaque_sp) 6276611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 62830fdc8d8SChris Lattner } 62930fdc8d8SChris Lattner 63030fdc8d8SChris Lattner void 631efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 632efed6131SCaroline Tice { 633efed6131SCaroline Tice if (m_opaque_sp) 634efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 635efed6131SCaroline Tice } 636efed6131SCaroline Tice 637efed6131SCaroline Tice void 638efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 639efed6131SCaroline Tice { 640efed6131SCaroline Tice if (m_opaque_sp) 641efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 642efed6131SCaroline Tice } 643efed6131SCaroline Tice 644efed6131SCaroline Tice void 64530fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 64630fdc8d8SChris Lattner { 6472d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 648ceb6b139SCaroline Tice 649ceb6b139SCaroline Tice if (log) 65093aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 651ceb6b139SCaroline Tice 6526611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 65330fdc8d8SChris Lattner { 654af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 655af67cecdSGreg Clayton Mutex::Locker api_locker; 656af67cecdSGreg Clayton if (target_sp) 657af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 65830fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 6596611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 66030fdc8d8SChris Lattner } 66130fdc8d8SChris Lattner } 6626611103cSGreg Clayton 6636611103cSGreg Clayton void 6646611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp) 6656611103cSGreg Clayton { 6666611103cSGreg Clayton m_opaque_sp = debugger_sp; 6676611103cSGreg Clayton } 6686611103cSGreg Clayton 6696611103cSGreg Clayton Debugger * 6706611103cSGreg Clayton SBDebugger::get () const 6716611103cSGreg Clayton { 6726611103cSGreg Clayton return m_opaque_sp.get(); 6736611103cSGreg Clayton } 6746611103cSGreg Clayton 6756611103cSGreg Clayton Debugger & 6766611103cSGreg Clayton SBDebugger::ref () const 6776611103cSGreg Clayton { 6786611103cSGreg Clayton assert (m_opaque_sp.get()); 6796611103cSGreg Clayton return *m_opaque_sp; 6806611103cSGreg Clayton } 6816611103cSGreg Clayton 6826611103cSGreg Clayton 683ebc1bb27SCaroline Tice SBDebugger 684ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 685ebc1bb27SCaroline Tice { 686af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 687ebc1bb27SCaroline Tice SBDebugger sb_debugger; 688ebc1bb27SCaroline Tice lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 689ebc1bb27SCaroline Tice if (debugger_sp) 690ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 691ebc1bb27SCaroline Tice return sb_debugger; 692ebc1bb27SCaroline Tice } 693e40e4218SJim Ingham 694dd759857SCaroline Tice const char * 695dd759857SCaroline Tice SBDebugger::GetInstanceName() 696dd759857SCaroline Tice { 697dd759857SCaroline Tice if (m_opaque_sp) 698dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 699dd759857SCaroline Tice else 700dd759857SCaroline Tice return NULL; 701dd759857SCaroline Tice } 702dd759857SCaroline Tice 7033df9a8dfSCaroline Tice SBError 704dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 7053df9a8dfSCaroline Tice { 7063df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7073df9a8dfSCaroline Tice 7081559a46bSCaroline Tice Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true, 709101c7c20SCaroline Tice debugger_instance_name); 7103df9a8dfSCaroline Tice SBError sb_error; 7113df9a8dfSCaroline Tice sb_error.SetError (err); 7123df9a8dfSCaroline Tice 7133df9a8dfSCaroline Tice return sb_error; 7143df9a8dfSCaroline Tice } 7153df9a8dfSCaroline Tice 7163df9a8dfSCaroline Tice lldb::SBStringList 717dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 7183df9a8dfSCaroline Tice { 7193df9a8dfSCaroline Tice SBStringList ret_value; 720101c7c20SCaroline Tice lldb::SettableVariableType var_type; 721508265afSJohnny Chen lldb_private::Error err; 722101c7c20SCaroline Tice 7233df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7243df9a8dfSCaroline Tice 725daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 726daccaa9eSCaroline Tice 727daccaa9eSCaroline Tice if (err.Success()) 728daccaa9eSCaroline Tice { 729311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 7303df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 731daccaa9eSCaroline Tice } 732daccaa9eSCaroline Tice else 733daccaa9eSCaroline Tice { 734daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 735daccaa9eSCaroline Tice } 736daccaa9eSCaroline Tice 7373df9a8dfSCaroline Tice 7383df9a8dfSCaroline Tice return ret_value; 7393df9a8dfSCaroline Tice } 7403df9a8dfSCaroline Tice 741a7015092SGreg Clayton uint32_t 742a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 743a7015092SGreg Clayton { 744a7015092SGreg Clayton if (m_opaque_sp) 745a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 746a7015092SGreg Clayton return 0; 747a7015092SGreg Clayton } 748a7015092SGreg Clayton 749a7015092SGreg Clayton void 750a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 751a7015092SGreg Clayton { 752a7015092SGreg Clayton if (m_opaque_sp) 753a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 754a7015092SGreg Clayton } 755a7015092SGreg Clayton 756a7015092SGreg Clayton const char * 757a7015092SGreg Clayton SBDebugger::GetPrompt() const 758a7015092SGreg Clayton { 7592d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 760ceb6b139SCaroline Tice 761ceb6b139SCaroline Tice if (log) 762cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 763750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 764ceb6b139SCaroline Tice 765a7015092SGreg Clayton if (m_opaque_sp) 766a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 767a7015092SGreg Clayton return 0; 768a7015092SGreg Clayton } 769a7015092SGreg Clayton 770a7015092SGreg Clayton void 771a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 772a7015092SGreg Clayton { 773a7015092SGreg Clayton if (m_opaque_sp) 774a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 775a7015092SGreg Clayton } 776a7015092SGreg Clayton 777a7015092SGreg Clayton 778a7015092SGreg Clayton lldb::ScriptLanguage 779a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 780a7015092SGreg Clayton { 781a7015092SGreg Clayton if (m_opaque_sp) 782a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 783a7015092SGreg Clayton return eScriptLanguageNone; 784a7015092SGreg Clayton } 785a7015092SGreg Clayton 786a7015092SGreg Clayton void 787a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang) 788a7015092SGreg Clayton { 789a7015092SGreg Clayton if (m_opaque_sp) 790af67cecdSGreg Clayton { 791a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 792a7015092SGreg Clayton } 793af67cecdSGreg Clayton } 794a7015092SGreg Clayton 795e40e4218SJim Ingham bool 796e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 797e40e4218SJim Ingham { 798e40e4218SJim Ingham if (m_opaque_sp) 799e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 800e40e4218SJim Ingham return false; 801e40e4218SJim Ingham } 802e40e4218SJim Ingham 803e40e4218SJim Ingham bool 804daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 805e40e4218SJim Ingham { 806e40e4218SJim Ingham if (m_opaque_sp) 807daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 808e40e4218SJim Ingham return false; 809e40e4218SJim Ingham } 810e40e4218SJim Ingham 811dde9cff3SCaroline Tice bool 812dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 813dde9cff3SCaroline Tice { 814dde9cff3SCaroline Tice if (m_opaque_sp) 815dde9cff3SCaroline Tice { 816dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 817dde9cff3SCaroline Tice lldb::user_id_t id = m_opaque_sp->GetID(); 818cfd1acedSGreg Clayton description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id); 819dde9cff3SCaroline Tice } 820dde9cff3SCaroline Tice else 821dde9cff3SCaroline Tice description.Printf ("No value"); 822dde9cff3SCaroline Tice 823dde9cff3SCaroline Tice return true; 824dde9cff3SCaroline Tice } 825efed6131SCaroline Tice 826efed6131SCaroline Tice lldb::user_id_t 827efed6131SCaroline Tice SBDebugger::GetID() 828efed6131SCaroline Tice { 829efed6131SCaroline Tice if (m_opaque_sp) 830efed6131SCaroline Tice return m_opaque_sp->GetID(); 831efed6131SCaroline Tice return LLDB_INVALID_UID; 832efed6131SCaroline Tice } 833