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 12e0d378b3SGreg Clayton #include "lldb/lldb-private.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 45fc36f791SGreg Clayton SBCommandInterpreter::InitializeSWIG (); 46fc36f791SGreg Clayton 4730fdc8d8SChris Lattner Debugger::Initialize(); 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner void 5130fdc8d8SChris Lattner SBDebugger::Terminate () 5230fdc8d8SChris Lattner { 5330fdc8d8SChris Lattner Debugger::Terminate(); 5430fdc8d8SChris Lattner } 5530fdc8d8SChris Lattner 5648e42549SGreg Clayton void 5748e42549SGreg Clayton SBDebugger::Clear () 5848e42549SGreg Clayton { 592d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 60ceb6b139SCaroline Tice 61ceb6b139SCaroline Tice if (log) 6293aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get()); 633d6086f6SCaroline Tice 643d6086f6SCaroline Tice if (m_opaque_sp) 653d6086f6SCaroline Tice m_opaque_sp->CleanUpInputReaders (); 66ceb6b139SCaroline Tice 6748e42549SGreg Clayton m_opaque_sp.reset(); 6848e42549SGreg Clayton } 6948e42549SGreg Clayton 706611103cSGreg Clayton SBDebugger 716611103cSGreg Clayton SBDebugger::Create() 726611103cSGreg Clayton { 732d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 74ceb6b139SCaroline Tice 756611103cSGreg Clayton SBDebugger debugger; 766611103cSGreg Clayton debugger.reset(Debugger::CreateInstance()); 77ceb6b139SCaroline Tice 78ceb6b139SCaroline Tice if (log) 79ceb6b139SCaroline Tice { 80ceb6b139SCaroline Tice SBStream sstr; 81ceb6b139SCaroline Tice debugger.GetDescription (sstr); 8293aa84e8SGreg Clayton log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 83ceb6b139SCaroline Tice } 84ceb6b139SCaroline Tice 856611103cSGreg Clayton return debugger; 866611103cSGreg Clayton } 876611103cSGreg Clayton 88e02657b1SCaroline Tice void 89e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger) 90e02657b1SCaroline Tice { 91e02657b1SCaroline Tice LogSP log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 92e02657b1SCaroline Tice 93e02657b1SCaroline Tice if (log) 94e02657b1SCaroline Tice { 95e02657b1SCaroline Tice SBStream sstr; 96e02657b1SCaroline Tice debugger.GetDescription (sstr); 97e02657b1SCaroline Tice log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 98e02657b1SCaroline Tice } 99e02657b1SCaroline Tice 100e02657b1SCaroline Tice Debugger::Destroy (debugger.m_opaque_sp); 101e02657b1SCaroline Tice 102e02657b1SCaroline Tice if (debugger.m_opaque_sp.get() != NULL) 103e02657b1SCaroline Tice debugger.m_opaque_sp.reset(); 104e02657b1SCaroline Tice } 105e02657b1SCaroline Tice 1066611103cSGreg Clayton SBDebugger::SBDebugger () : 1076611103cSGreg Clayton m_opaque_sp () 1086611103cSGreg Clayton { 1096611103cSGreg Clayton } 1106611103cSGreg Clayton 111efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 112efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 113efabb123SGreg Clayton { 114efabb123SGreg Clayton } 115efabb123SGreg Clayton 116efabb123SGreg Clayton SBDebugger & 117efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 118efabb123SGreg Clayton { 119efabb123SGreg Clayton if (this != &rhs) 120efabb123SGreg Clayton { 121efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 122efabb123SGreg Clayton } 123efabb123SGreg Clayton return *this; 124efabb123SGreg Clayton } 125efabb123SGreg Clayton 1266611103cSGreg Clayton SBDebugger::~SBDebugger () 1276611103cSGreg Clayton { 1286611103cSGreg Clayton } 1296611103cSGreg Clayton 1306611103cSGreg Clayton bool 1316611103cSGreg Clayton SBDebugger::IsValid() const 1326611103cSGreg Clayton { 1336611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1346611103cSGreg Clayton } 1356611103cSGreg Clayton 1366611103cSGreg Clayton 13730fdc8d8SChris Lattner void 13830fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 13930fdc8d8SChris Lattner { 1406611103cSGreg Clayton if (m_opaque_sp) 1416611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 14230fdc8d8SChris Lattner } 14330fdc8d8SChris Lattner 1446eee5aa0SGreg Clayton void 1456eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 1466eee5aa0SGreg Clayton { 1476eee5aa0SGreg Clayton if (m_opaque_sp) 1486eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 1496eee5aa0SGreg Clayton } 1506eee5aa0SGreg Clayton 15130fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 15230fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 15330fdc8d8SChris Lattner void 15430fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 15530fdc8d8SChris Lattner { 1562d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 157ceb6b139SCaroline Tice 158ceb6b139SCaroline Tice if (log) 159cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 160cfd1acedSGreg Clayton fh, transfer_ownership); 161ceb6b139SCaroline Tice 1626611103cSGreg Clayton if (m_opaque_sp) 1636611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 16430fdc8d8SChris Lattner } 16530fdc8d8SChris Lattner 16630fdc8d8SChris Lattner void 16730fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 16830fdc8d8SChris Lattner { 1692d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 170ceb6b139SCaroline Tice 171ceb6b139SCaroline Tice 172ceb6b139SCaroline Tice if (log) 173cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 174cfd1acedSGreg Clayton fh, transfer_ownership); 175ceb6b139SCaroline Tice 1766611103cSGreg Clayton if (m_opaque_sp) 1776611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 17830fdc8d8SChris Lattner } 17930fdc8d8SChris Lattner 18030fdc8d8SChris Lattner void 18130fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 18230fdc8d8SChris Lattner { 1832d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 184ceb6b139SCaroline Tice 185ceb6b139SCaroline Tice 186ceb6b139SCaroline Tice if (log) 187cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 188cfd1acedSGreg Clayton fh, transfer_ownership); 189ceb6b139SCaroline Tice 1906611103cSGreg Clayton if (m_opaque_sp) 1916611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 19230fdc8d8SChris Lattner } 19330fdc8d8SChris Lattner 19430fdc8d8SChris Lattner FILE * 19530fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 19630fdc8d8SChris Lattner { 1976611103cSGreg Clayton if (m_opaque_sp) 19851b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 1996611103cSGreg Clayton return NULL; 20030fdc8d8SChris Lattner } 20130fdc8d8SChris Lattner 20230fdc8d8SChris Lattner FILE * 20330fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 20430fdc8d8SChris Lattner { 2056611103cSGreg Clayton if (m_opaque_sp) 20651b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2076611103cSGreg Clayton return NULL; 20830fdc8d8SChris Lattner } 20930fdc8d8SChris Lattner 21030fdc8d8SChris Lattner FILE * 21130fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 21230fdc8d8SChris Lattner { 2136611103cSGreg Clayton if (m_opaque_sp) 21451b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2156611103cSGreg Clayton return NULL; 21630fdc8d8SChris Lattner } 21730fdc8d8SChris Lattner 21830fdc8d8SChris Lattner SBCommandInterpreter 21930fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 22030fdc8d8SChris Lattner { 2212d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 222ceb6b139SCaroline Tice 2236611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 2246611103cSGreg Clayton if (m_opaque_sp) 2256611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 226ceb6b139SCaroline Tice 227750cd175SCaroline Tice if (log) 22893aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 229750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 230750cd175SCaroline Tice 23130fdc8d8SChris Lattner return sb_interpreter; 23230fdc8d8SChris Lattner } 23330fdc8d8SChris Lattner 23430fdc8d8SChris Lattner void 23530fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 23630fdc8d8SChris Lattner { 2376611103cSGreg Clayton if (m_opaque_sp) 2386611103cSGreg Clayton { 239af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 240af67cecdSGreg Clayton Mutex::Locker api_locker; 241af67cecdSGreg Clayton if (target_sp) 242af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 243af67cecdSGreg Clayton 2446611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 24530fdc8d8SChris Lattner SBCommandReturnObject result; 24630fdc8d8SChris Lattner 24730fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 24830fdc8d8SChris Lattner 24930fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 25030fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 25130fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 25230fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 25330fdc8d8SChris Lattner 2546611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 25530fdc8d8SChris Lattner { 2566611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 25730fdc8d8SChris Lattner if (process.IsValid()) 25830fdc8d8SChris Lattner { 25930fdc8d8SChris Lattner EventSP event_sp; 2606611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 26130fdc8d8SChris Lattner while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp)) 26230fdc8d8SChris Lattner { 26330fdc8d8SChris Lattner SBEvent event(event_sp); 26430fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 26530fdc8d8SChris Lattner } 26630fdc8d8SChris Lattner } 26730fdc8d8SChris Lattner } 26830fdc8d8SChris Lattner } 2696611103cSGreg Clayton } 27030fdc8d8SChris Lattner 27130fdc8d8SChris Lattner SBListener 27230fdc8d8SChris Lattner SBDebugger::GetListener () 27330fdc8d8SChris Lattner { 2742d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 275ceb6b139SCaroline Tice 2766611103cSGreg Clayton SBListener sb_listener; 2776611103cSGreg Clayton if (m_opaque_sp) 2786611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 279ceb6b139SCaroline Tice 280750cd175SCaroline Tice if (log) 28193aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 282750cd175SCaroline Tice sb_listener.get()); 283750cd175SCaroline Tice 28430fdc8d8SChris Lattner return sb_listener; 28530fdc8d8SChris Lattner } 28630fdc8d8SChris Lattner 28730fdc8d8SChris Lattner void 28830fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 28930fdc8d8SChris Lattner { 290af67cecdSGreg Clayton if (!process.IsValid()) 291af67cecdSGreg Clayton return; 292af67cecdSGreg Clayton 29330fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 29430fdc8d8SChris Lattner char stdio_buffer[1024]; 29530fdc8d8SChris Lattner size_t len; 29630fdc8d8SChris Lattner 297af67cecdSGreg Clayton Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex()); 298af67cecdSGreg Clayton 299af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 30030fdc8d8SChris Lattner { 301af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 30230fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 30330fdc8d8SChris Lattner if (out != NULL) 30430fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 30530fdc8d8SChris Lattner } 306af67cecdSGreg Clayton 307af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 30830fdc8d8SChris Lattner { 309af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 31030fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 311af67cecdSGreg Clayton if (err != NULL) 312af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 31330fdc8d8SChris Lattner } 314af67cecdSGreg Clayton 315af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 31630fdc8d8SChris Lattner { 31730fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 31830fdc8d8SChris Lattner 31930fdc8d8SChris Lattner if (event_state == eStateInvalid) 32030fdc8d8SChris Lattner return; 32130fdc8d8SChris Lattner 32230fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 32330fdc8d8SChris Lattner if (!is_stopped) 3242976d00aSJim Ingham process.ReportEventState (event, out); 32530fdc8d8SChris Lattner } 32630fdc8d8SChris Lattner } 32730fdc8d8SChris Lattner 32830fdc8d8SChris Lattner SBSourceManager & 32930fdc8d8SChris Lattner SBDebugger::GetSourceManager () 33030fdc8d8SChris Lattner { 33130fdc8d8SChris Lattner static SourceManager g_lldb_source_manager; 332efabb123SGreg Clayton static SBSourceManager g_sb_source_manager (&g_lldb_source_manager); 33330fdc8d8SChris Lattner return g_sb_source_manager; 33430fdc8d8SChris Lattner } 33530fdc8d8SChris Lattner 33630fdc8d8SChris Lattner 33730fdc8d8SChris Lattner bool 33830fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 33930fdc8d8SChris Lattner { 34030fdc8d8SChris Lattner if (arch_name && arch_name_len) 34130fdc8d8SChris Lattner { 342daccaa9eSCaroline Tice ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture (); 343daccaa9eSCaroline Tice 34430fdc8d8SChris Lattner if (default_arch.IsValid()) 34530fdc8d8SChris Lattner { 34664195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 34730fdc8d8SChris Lattner return true; 34830fdc8d8SChris Lattner } 34930fdc8d8SChris Lattner } 35030fdc8d8SChris Lattner if (arch_name && arch_name_len) 35130fdc8d8SChris Lattner arch_name[0] = '\0'; 35230fdc8d8SChris Lattner return false; 35330fdc8d8SChris Lattner } 35430fdc8d8SChris Lattner 35530fdc8d8SChris Lattner 35630fdc8d8SChris Lattner bool 35730fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 35830fdc8d8SChris Lattner { 35930fdc8d8SChris Lattner if (arch_name) 36030fdc8d8SChris Lattner { 361*eb0103f2SGreg Clayton ArchSpec arch (arch_name, NULL); 36230fdc8d8SChris Lattner if (arch.IsValid()) 36330fdc8d8SChris Lattner { 364daccaa9eSCaroline Tice lldb_private::Target::SetDefaultArchitecture (arch); 36530fdc8d8SChris Lattner return true; 36630fdc8d8SChris Lattner } 36730fdc8d8SChris Lattner } 36830fdc8d8SChris Lattner return false; 36930fdc8d8SChris Lattner } 37030fdc8d8SChris Lattner 37130fdc8d8SChris Lattner ScriptLanguage 37230fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 37330fdc8d8SChris Lattner { 374af67cecdSGreg Clayton 37530fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 37630fdc8d8SChris Lattner eScriptLanguageDefault, 37730fdc8d8SChris Lattner NULL); 37830fdc8d8SChris Lattner } 37930fdc8d8SChris Lattner 38030fdc8d8SChris Lattner const char * 38130fdc8d8SChris Lattner SBDebugger::GetVersionString () 38230fdc8d8SChris Lattner { 38330fdc8d8SChris Lattner return lldb_private::GetVersion(); 38430fdc8d8SChris Lattner } 38530fdc8d8SChris Lattner 38630fdc8d8SChris Lattner const char * 38730fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state) 38830fdc8d8SChris Lattner { 38930fdc8d8SChris Lattner return lldb_private::StateAsCString (state); 39030fdc8d8SChris Lattner } 39130fdc8d8SChris Lattner 39230fdc8d8SChris Lattner bool 39330fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state) 39430fdc8d8SChris Lattner { 3952d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3964838131bSGreg Clayton 3974838131bSGreg Clayton const bool result = lldb_private::StateIsRunningState (state); 3984838131bSGreg Clayton if (log) 3994838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 4004838131bSGreg Clayton lldb_private::StateAsCString (state), result); 4014838131bSGreg Clayton 4024838131bSGreg Clayton return result; 40330fdc8d8SChris Lattner } 40430fdc8d8SChris Lattner 40530fdc8d8SChris Lattner bool 40630fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state) 40730fdc8d8SChris Lattner { 4082d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 409ceb6b139SCaroline Tice 4104838131bSGreg Clayton const bool result = lldb_private::StateIsStoppedState (state); 411ceb6b139SCaroline Tice if (log) 4124838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 4134838131bSGreg Clayton lldb_private::StateAsCString (state), result); 414ceb6b139SCaroline Tice 4154838131bSGreg Clayton return result; 41630fdc8d8SChris Lattner } 41730fdc8d8SChris Lattner 41830fdc8d8SChris Lattner 41930fdc8d8SChris Lattner SBTarget 42030fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 42130fdc8d8SChris Lattner const char *target_triple) 42230fdc8d8SChris Lattner { 4236611103cSGreg Clayton SBTarget target; 4246611103cSGreg Clayton if (m_opaque_sp) 4256611103cSGreg Clayton { 42630fdc8d8SChris Lattner ArchSpec arch; 427274060b6SGreg Clayton FileSpec file_spec (filename, true); 428*eb0103f2SGreg Clayton arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 42930fdc8d8SChris Lattner TargetSP target_sp; 430e996fd30SGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp)); 4316611103cSGreg Clayton target.reset (target_sp); 4326611103cSGreg Clayton } 4334838131bSGreg Clayton 4342d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4354838131bSGreg Clayton if (log) 4364838131bSGreg Clayton { 437cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 4384838131bSGreg Clayton m_opaque_sp.get(), filename, target_triple, target.get()); 4394838131bSGreg Clayton } 4404838131bSGreg Clayton 44130fdc8d8SChris Lattner return target; 44230fdc8d8SChris Lattner } 44330fdc8d8SChris Lattner 44430fdc8d8SChris Lattner SBTarget 44564195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 44630fdc8d8SChris Lattner { 4472d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 448ceb6b139SCaroline Tice 4496611103cSGreg Clayton SBTarget target; 4506611103cSGreg Clayton if (m_opaque_sp) 4516611103cSGreg Clayton { 452274060b6SGreg Clayton FileSpec file (filename, true); 45364195a2cSGreg Clayton ArchSpec arch; 45430fdc8d8SChris Lattner TargetSP target_sp; 45530fdc8d8SChris Lattner Error error; 45630fdc8d8SChris Lattner 45764195a2cSGreg Clayton if (arch_cstr) 458*eb0103f2SGreg Clayton arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 45964195a2cSGreg Clayton 460e996fd30SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp); 46130fdc8d8SChris Lattner 46230fdc8d8SChris Lattner if (error.Success()) 4636611103cSGreg Clayton { 4642976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 4656611103cSGreg Clayton target.reset(target_sp); 4666611103cSGreg Clayton } 4676611103cSGreg Clayton } 468ceb6b139SCaroline Tice 469ceb6b139SCaroline Tice if (log) 470ceb6b139SCaroline Tice { 471cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 47264195a2cSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target.get()); 473ceb6b139SCaroline Tice } 474ceb6b139SCaroline Tice 4756611103cSGreg Clayton return target; 47630fdc8d8SChris Lattner } 47730fdc8d8SChris Lattner 47830fdc8d8SChris Lattner SBTarget 47930fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 48030fdc8d8SChris Lattner { 4816611103cSGreg Clayton SBTarget target; 4826611103cSGreg Clayton if (m_opaque_sp) 4836611103cSGreg Clayton { 484274060b6SGreg Clayton FileSpec file (filename, true); 485daccaa9eSCaroline Tice ArchSpec arch = lldb_private::Target::GetDefaultArchitecture (); 48630fdc8d8SChris Lattner TargetSP target_sp; 48730fdc8d8SChris Lattner Error error; 48830fdc8d8SChris Lattner 489e996fd30SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp); 49030fdc8d8SChris Lattner 4916611103cSGreg Clayton if (error.Success()) 4926611103cSGreg Clayton { 4932976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 4946611103cSGreg Clayton target.reset (target_sp); 4956611103cSGreg Clayton } 4966611103cSGreg Clayton } 4972d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4984838131bSGreg Clayton if (log) 4994838131bSGreg Clayton { 500cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 5014838131bSGreg Clayton m_opaque_sp.get(), filename, target.get()); 5024838131bSGreg Clayton } 5036611103cSGreg Clayton return target; 50430fdc8d8SChris Lattner } 50530fdc8d8SChris Lattner 50630fdc8d8SChris Lattner SBTarget 50730fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 50830fdc8d8SChris Lattner { 5096611103cSGreg Clayton SBTarget sb_target; 5106611103cSGreg Clayton if (m_opaque_sp) 511af67cecdSGreg Clayton { 512af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5136611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 514af67cecdSGreg Clayton } 51530fdc8d8SChris Lattner return sb_target; 51630fdc8d8SChris Lattner } 51730fdc8d8SChris Lattner 51830fdc8d8SChris Lattner SBTarget 51930fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 52030fdc8d8SChris Lattner { 5216611103cSGreg Clayton SBTarget sb_target; 5226611103cSGreg Clayton if (m_opaque_sp) 523af67cecdSGreg Clayton { 524af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5256611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 526af67cecdSGreg Clayton } 52730fdc8d8SChris Lattner return sb_target; 52830fdc8d8SChris Lattner } 52930fdc8d8SChris Lattner 53030fdc8d8SChris Lattner SBTarget 53130fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 53230fdc8d8SChris Lattner { 5336611103cSGreg Clayton SBTarget sb_target; 5346611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 5356611103cSGreg Clayton { 536af67cecdSGreg Clayton // No need to lock, the target list is thread safe 537*eb0103f2SGreg Clayton ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 538274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 5396611103cSGreg Clayton sb_target.reset(target_sp); 5406611103cSGreg Clayton } 5416611103cSGreg Clayton return sb_target; 54230fdc8d8SChris Lattner } 54330fdc8d8SChris Lattner 54430fdc8d8SChris Lattner SBTarget 54530fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp) 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().FindTargetWithProcess (process_sp.get())); 552af67cecdSGreg Clayton } 55330fdc8d8SChris Lattner return sb_target; 55430fdc8d8SChris Lattner } 55530fdc8d8SChris Lattner 55630fdc8d8SChris Lattner 55730fdc8d8SChris Lattner uint32_t 55830fdc8d8SChris Lattner SBDebugger::GetNumTargets () 55930fdc8d8SChris Lattner { 5606611103cSGreg Clayton if (m_opaque_sp) 561af67cecdSGreg Clayton { 562af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5636611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 564af67cecdSGreg Clayton } 5656611103cSGreg Clayton return 0; 5666611103cSGreg Clayton } 56730fdc8d8SChris Lattner 56830fdc8d8SChris Lattner SBTarget 5692976d00aSJim Ingham SBDebugger::GetSelectedTarget () 57030fdc8d8SChris Lattner { 5712d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 572ceb6b139SCaroline Tice 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 5772976d00aSJim Ingham sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ()); 578af67cecdSGreg Clayton } 579ceb6b139SCaroline Tice 580ceb6b139SCaroline Tice if (log) 581ceb6b139SCaroline Tice { 582ceb6b139SCaroline Tice SBStream sstr; 583ceb6b139SCaroline Tice sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief); 58493aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 585750cd175SCaroline Tice sb_target.get(), sstr.GetData()); 586ceb6b139SCaroline Tice } 587ceb6b139SCaroline Tice 58830fdc8d8SChris Lattner return sb_target; 58930fdc8d8SChris Lattner } 59030fdc8d8SChris Lattner 59130fdc8d8SChris Lattner void 59230fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 59330fdc8d8SChris Lattner { 5942d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 595ceb6b139SCaroline Tice 596ceb6b139SCaroline Tice if (log) 597cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(), 598cfd1acedSGreg Clayton baton, (int) data_len, (const char *) data, data_len); 599ceb6b139SCaroline Tice 6006611103cSGreg Clayton if (m_opaque_sp) 6016611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 60230fdc8d8SChris Lattner } 60330fdc8d8SChris Lattner 60430fdc8d8SChris Lattner void 605efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 606efed6131SCaroline Tice { 607efed6131SCaroline Tice if (m_opaque_sp) 608efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 609efed6131SCaroline Tice } 610efed6131SCaroline Tice 611efed6131SCaroline Tice void 612efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 613efed6131SCaroline Tice { 614efed6131SCaroline Tice if (m_opaque_sp) 615efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 616efed6131SCaroline Tice } 617efed6131SCaroline Tice 618efed6131SCaroline Tice void 61930fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 62030fdc8d8SChris Lattner { 6212d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 622ceb6b139SCaroline Tice 623ceb6b139SCaroline Tice if (log) 62493aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 625ceb6b139SCaroline Tice 6266611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 62730fdc8d8SChris Lattner { 628af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 629af67cecdSGreg Clayton Mutex::Locker api_locker; 630af67cecdSGreg Clayton if (target_sp) 631af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 63230fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 6336611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 63430fdc8d8SChris Lattner } 63530fdc8d8SChris Lattner } 6366611103cSGreg Clayton 6376611103cSGreg Clayton void 6386611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp) 6396611103cSGreg Clayton { 6406611103cSGreg Clayton m_opaque_sp = debugger_sp; 6416611103cSGreg Clayton } 6426611103cSGreg Clayton 6436611103cSGreg Clayton Debugger * 6446611103cSGreg Clayton SBDebugger::get () const 6456611103cSGreg Clayton { 6466611103cSGreg Clayton return m_opaque_sp.get(); 6476611103cSGreg Clayton } 6486611103cSGreg Clayton 6496611103cSGreg Clayton Debugger & 6506611103cSGreg Clayton SBDebugger::ref () const 6516611103cSGreg Clayton { 6526611103cSGreg Clayton assert (m_opaque_sp.get()); 6536611103cSGreg Clayton return *m_opaque_sp; 6546611103cSGreg Clayton } 6556611103cSGreg Clayton 6566611103cSGreg Clayton 657ebc1bb27SCaroline Tice SBDebugger 658ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 659ebc1bb27SCaroline Tice { 660af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 661ebc1bb27SCaroline Tice SBDebugger sb_debugger; 662ebc1bb27SCaroline Tice lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 663ebc1bb27SCaroline Tice if (debugger_sp) 664ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 665ebc1bb27SCaroline Tice return sb_debugger; 666ebc1bb27SCaroline Tice } 667e40e4218SJim Ingham 668dd759857SCaroline Tice const char * 669dd759857SCaroline Tice SBDebugger::GetInstanceName() 670dd759857SCaroline Tice { 671dd759857SCaroline Tice if (m_opaque_sp) 672dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 673dd759857SCaroline Tice else 674dd759857SCaroline Tice return NULL; 675dd759857SCaroline Tice } 676dd759857SCaroline Tice 6773df9a8dfSCaroline Tice SBError 678dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 6793df9a8dfSCaroline Tice { 6803df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 6813df9a8dfSCaroline Tice 682e0d378b3SGreg Clayton Error err = root_settings_controller->SetVariable (var_name, 683e0d378b3SGreg Clayton value, 684e0d378b3SGreg Clayton eVarSetOperationAssign, 685e0d378b3SGreg Clayton true, 686101c7c20SCaroline Tice debugger_instance_name); 6873df9a8dfSCaroline Tice SBError sb_error; 6883df9a8dfSCaroline Tice sb_error.SetError (err); 6893df9a8dfSCaroline Tice 6903df9a8dfSCaroline Tice return sb_error; 6913df9a8dfSCaroline Tice } 6923df9a8dfSCaroline Tice 6933df9a8dfSCaroline Tice lldb::SBStringList 694dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 6953df9a8dfSCaroline Tice { 6963df9a8dfSCaroline Tice SBStringList ret_value; 697e0d378b3SGreg Clayton SettableVariableType var_type; 698508265afSJohnny Chen lldb_private::Error err; 699101c7c20SCaroline Tice 7003df9a8dfSCaroline Tice lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); 7013df9a8dfSCaroline Tice 702daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 703daccaa9eSCaroline Tice 704daccaa9eSCaroline Tice if (err.Success()) 705daccaa9eSCaroline Tice { 706311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 7073df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 708daccaa9eSCaroline Tice } 709daccaa9eSCaroline Tice else 710daccaa9eSCaroline Tice { 711daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 712daccaa9eSCaroline Tice } 713daccaa9eSCaroline Tice 7143df9a8dfSCaroline Tice 7153df9a8dfSCaroline Tice return ret_value; 7163df9a8dfSCaroline Tice } 7173df9a8dfSCaroline Tice 718a7015092SGreg Clayton uint32_t 719a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 720a7015092SGreg Clayton { 721a7015092SGreg Clayton if (m_opaque_sp) 722a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 723a7015092SGreg Clayton return 0; 724a7015092SGreg Clayton } 725a7015092SGreg Clayton 726a7015092SGreg Clayton void 727a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 728a7015092SGreg Clayton { 729a7015092SGreg Clayton if (m_opaque_sp) 730a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 731a7015092SGreg Clayton } 732a7015092SGreg Clayton 733a7015092SGreg Clayton const char * 734a7015092SGreg Clayton SBDebugger::GetPrompt() const 735a7015092SGreg Clayton { 7362d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 737ceb6b139SCaroline Tice 738ceb6b139SCaroline Tice if (log) 739cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 740750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 741ceb6b139SCaroline Tice 742a7015092SGreg Clayton if (m_opaque_sp) 743a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 744a7015092SGreg Clayton return 0; 745a7015092SGreg Clayton } 746a7015092SGreg Clayton 747a7015092SGreg Clayton void 748a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 749a7015092SGreg Clayton { 750a7015092SGreg Clayton if (m_opaque_sp) 751a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 752a7015092SGreg Clayton } 753a7015092SGreg Clayton 754a7015092SGreg Clayton 755a7015092SGreg Clayton lldb::ScriptLanguage 756a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 757a7015092SGreg Clayton { 758a7015092SGreg Clayton if (m_opaque_sp) 759a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 760a7015092SGreg Clayton return eScriptLanguageNone; 761a7015092SGreg Clayton } 762a7015092SGreg Clayton 763a7015092SGreg Clayton void 764a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang) 765a7015092SGreg Clayton { 766a7015092SGreg Clayton if (m_opaque_sp) 767af67cecdSGreg Clayton { 768a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 769a7015092SGreg Clayton } 770af67cecdSGreg Clayton } 771a7015092SGreg Clayton 772e40e4218SJim Ingham bool 773e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 774e40e4218SJim Ingham { 775e40e4218SJim Ingham if (m_opaque_sp) 776e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 777e40e4218SJim Ingham return false; 778e40e4218SJim Ingham } 779e40e4218SJim Ingham 780e40e4218SJim Ingham bool 781daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 782e40e4218SJim Ingham { 783e40e4218SJim Ingham if (m_opaque_sp) 784daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 785e40e4218SJim Ingham return false; 786e40e4218SJim Ingham } 787e40e4218SJim Ingham 788dde9cff3SCaroline Tice bool 789dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 790dde9cff3SCaroline Tice { 791dde9cff3SCaroline Tice if (m_opaque_sp) 792dde9cff3SCaroline Tice { 793dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 794dde9cff3SCaroline Tice lldb::user_id_t id = m_opaque_sp->GetID(); 795cfd1acedSGreg Clayton description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id); 796dde9cff3SCaroline Tice } 797dde9cff3SCaroline Tice else 798dde9cff3SCaroline Tice description.Printf ("No value"); 799dde9cff3SCaroline Tice 800dde9cff3SCaroline Tice return true; 801dde9cff3SCaroline Tice } 802efed6131SCaroline Tice 803efed6131SCaroline Tice lldb::user_id_t 804efed6131SCaroline Tice SBDebugger::GetID() 805efed6131SCaroline Tice { 806efed6131SCaroline Tice if (m_opaque_sp) 807efed6131SCaroline Tice return m_opaque_sp->GetID(); 808efed6131SCaroline Tice return LLDB_INVALID_UID; 809efed6131SCaroline Tice } 810