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" 182289fa48SGreg Clayton #include "lldb/API/SBError.h" 19ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h" 20ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h" 21ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h" 223df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h" 233df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h" 24dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 253df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h" 263df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h" 273df9a8dfSCaroline Tice #include "lldb/API/SBThread.h" 28061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h" 29061858ceSEnrico Granata #include "lldb/API/SBTypeFormat.h" 30061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h" 31061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h" 32061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h" 33061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h" 34061858ceSEnrico Granata 35061858ceSEnrico Granata 36061858ceSEnrico Granata #include "lldb/Core/DataVisualization.h" 376eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h" 386eee5aa0SGreg Clayton #include "lldb/Core/State.h" 396eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h" 406eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h" 41cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h" 426eee5aa0SGreg Clayton #include "lldb/Target/Process.h" 436eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h" 4430fdc8d8SChris Lattner 4530fdc8d8SChris Lattner using namespace lldb; 4630fdc8d8SChris Lattner using namespace lldb_private; 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner void 4930fdc8d8SChris Lattner SBDebugger::Initialize () 5030fdc8d8SChris Lattner { 51431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 52ceb6b139SCaroline Tice 53ceb6b139SCaroline Tice if (log) 54ceb6b139SCaroline Tice log->Printf ("SBDebugger::Initialize ()"); 55ceb6b139SCaroline Tice 56fc36f791SGreg Clayton SBCommandInterpreter::InitializeSWIG (); 57fc36f791SGreg Clayton 5830fdc8d8SChris Lattner Debugger::Initialize(); 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 6130fdc8d8SChris Lattner void 6230fdc8d8SChris Lattner SBDebugger::Terminate () 6330fdc8d8SChris Lattner { 6430fdc8d8SChris Lattner Debugger::Terminate(); 6530fdc8d8SChris Lattner } 6630fdc8d8SChris Lattner 6748e42549SGreg Clayton void 6848e42549SGreg Clayton SBDebugger::Clear () 6948e42549SGreg Clayton { 70431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 71ceb6b139SCaroline Tice 72ceb6b139SCaroline Tice if (log) 7393aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get()); 743d6086f6SCaroline Tice 753d6086f6SCaroline Tice if (m_opaque_sp) 763d6086f6SCaroline Tice m_opaque_sp->CleanUpInputReaders (); 77ceb6b139SCaroline Tice 7848e42549SGreg Clayton m_opaque_sp.reset(); 7948e42549SGreg Clayton } 8048e42549SGreg Clayton 816611103cSGreg Clayton SBDebugger 826611103cSGreg Clayton SBDebugger::Create() 836611103cSGreg Clayton { 84228063cdSJim Ingham return SBDebugger::Create(false, NULL, NULL); 8506942690SJim Ingham } 8606942690SJim Ingham 8706942690SJim Ingham SBDebugger 8806942690SJim Ingham SBDebugger::Create(bool source_init_files) 8906942690SJim Ingham { 90228063cdSJim Ingham return SBDebugger::Create (source_init_files, NULL, NULL); 91228063cdSJim Ingham } 92228063cdSJim Ingham 93228063cdSJim Ingham SBDebugger 94228063cdSJim Ingham SBDebugger::Create(bool source_init_files, lldb::LogOutputCallback callback, void *baton) 95228063cdSJim Ingham 96228063cdSJim Ingham { 97431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 98ceb6b139SCaroline Tice 996611103cSGreg Clayton SBDebugger debugger; 100228063cdSJim Ingham debugger.reset(Debugger::CreateInstance(callback, baton)); 101ceb6b139SCaroline Tice 102ceb6b139SCaroline Tice if (log) 103ceb6b139SCaroline Tice { 104ceb6b139SCaroline Tice SBStream sstr; 105ceb6b139SCaroline Tice debugger.GetDescription (sstr); 10693aa84e8SGreg Clayton log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 107ceb6b139SCaroline Tice } 108ceb6b139SCaroline Tice 10906942690SJim Ingham SBCommandInterpreter interp = debugger.GetCommandInterpreter(); 11006942690SJim Ingham if (source_init_files) 11106942690SJim Ingham { 11206942690SJim Ingham interp.get()->SkipLLDBInitFiles(false); 11306942690SJim Ingham interp.get()->SkipAppInitFiles (false); 11406942690SJim Ingham SBCommandReturnObject result; 11506942690SJim Ingham interp.SourceInitFileInHomeDirectory(result); 11606942690SJim Ingham } 11706942690SJim Ingham else 11806942690SJim Ingham { 11906942690SJim Ingham interp.get()->SkipLLDBInitFiles(true); 12006942690SJim Ingham interp.get()->SkipAppInitFiles (true); 12106942690SJim Ingham } 1226611103cSGreg Clayton return debugger; 1236611103cSGreg Clayton } 1246611103cSGreg Clayton 125e02657b1SCaroline Tice void 126e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger) 127e02657b1SCaroline Tice { 128431ce678SGreg Clayton LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 129e02657b1SCaroline Tice 130e02657b1SCaroline Tice if (log) 131e02657b1SCaroline Tice { 132e02657b1SCaroline Tice SBStream sstr; 133e02657b1SCaroline Tice debugger.GetDescription (sstr); 134e02657b1SCaroline Tice log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 135e02657b1SCaroline Tice } 136e02657b1SCaroline Tice 137e02657b1SCaroline Tice Debugger::Destroy (debugger.m_opaque_sp); 138e02657b1SCaroline Tice 139e02657b1SCaroline Tice if (debugger.m_opaque_sp.get() != NULL) 140e02657b1SCaroline Tice debugger.m_opaque_sp.reset(); 141e02657b1SCaroline Tice } 142e02657b1SCaroline Tice 143f9322415SGreg Clayton void 144f9322415SGreg Clayton SBDebugger::MemoryPressureDetected () 145f9322415SGreg Clayton { 1460cd70866SGreg Clayton // Since this function can be call asynchronously, we allow it to be 1470cd70866SGreg Clayton // non-mandatory. We have seen deadlocks with this function when called 1480cd70866SGreg Clayton // so we need to safeguard against this until we can determine what is 1490cd70866SGreg Clayton // causing the deadlocks. 150aebdf1beSJim Ingham LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 151aebdf1beSJim Ingham 1520cd70866SGreg Clayton const bool mandatory = false; 153aebdf1beSJim Ingham if (log) 154aebdf1beSJim Ingham { 155aebdf1beSJim Ingham log->Printf ("SBDebugger::MemoryPressureDetected (), mandatory = %d", mandatory); 156aebdf1beSJim Ingham } 157aebdf1beSJim Ingham 1580cd70866SGreg Clayton ModuleList::RemoveOrphanSharedModules(mandatory); 159f9322415SGreg Clayton } 160f9322415SGreg Clayton 1616611103cSGreg Clayton SBDebugger::SBDebugger () : 1626611103cSGreg Clayton m_opaque_sp () 1636611103cSGreg Clayton { 1646611103cSGreg Clayton } 1656611103cSGreg Clayton 166274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) : 167274fd6e9SEnrico Granata m_opaque_sp(debugger_sp) 168274fd6e9SEnrico Granata { 169274fd6e9SEnrico Granata } 170274fd6e9SEnrico Granata 171efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 172efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 173efabb123SGreg Clayton { 174efabb123SGreg Clayton } 175efabb123SGreg Clayton 176efabb123SGreg Clayton SBDebugger & 177efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 178efabb123SGreg Clayton { 179efabb123SGreg Clayton if (this != &rhs) 180efabb123SGreg Clayton { 181efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 182efabb123SGreg Clayton } 183efabb123SGreg Clayton return *this; 184efabb123SGreg Clayton } 185efabb123SGreg Clayton 1866611103cSGreg Clayton SBDebugger::~SBDebugger () 1876611103cSGreg Clayton { 1886611103cSGreg Clayton } 1896611103cSGreg Clayton 1906611103cSGreg Clayton bool 1916611103cSGreg Clayton SBDebugger::IsValid() const 1926611103cSGreg Clayton { 1936611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1946611103cSGreg Clayton } 1956611103cSGreg Clayton 1966611103cSGreg Clayton 19730fdc8d8SChris Lattner void 19830fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 19930fdc8d8SChris Lattner { 2006611103cSGreg Clayton if (m_opaque_sp) 2016611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 20230fdc8d8SChris Lattner } 20330fdc8d8SChris Lattner 204e64f0dc7SJim Ingham bool 205e64f0dc7SJim Ingham SBDebugger::GetAsync () 206e64f0dc7SJim Ingham { 207e64f0dc7SJim Ingham if (m_opaque_sp) 208e64f0dc7SJim Ingham return m_opaque_sp->GetAsyncExecution(); 209e64f0dc7SJim Ingham else 210e64f0dc7SJim Ingham return false; 211e64f0dc7SJim Ingham } 212e64f0dc7SJim Ingham 2136eee5aa0SGreg Clayton void 2146eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 2156eee5aa0SGreg Clayton { 2166eee5aa0SGreg Clayton if (m_opaque_sp) 2176eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 2186eee5aa0SGreg Clayton } 2196eee5aa0SGreg Clayton 22016e0c686SJim Ingham void 22116e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b) 22216e0c686SJim Ingham { 22316e0c686SJim Ingham if (m_opaque_sp) 22416e0c686SJim Ingham m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b); 22516e0c686SJim Ingham } 22616e0c686SJim Ingham 22730fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 22830fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 22930fdc8d8SChris Lattner void 23030fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 23130fdc8d8SChris Lattner { 232431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 233ceb6b139SCaroline Tice 234ceb6b139SCaroline Tice if (log) 235cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 236cfd1acedSGreg Clayton fh, transfer_ownership); 237ceb6b139SCaroline Tice 2386611103cSGreg Clayton if (m_opaque_sp) 2396611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 24030fdc8d8SChris Lattner } 24130fdc8d8SChris Lattner 24230fdc8d8SChris Lattner void 24330fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 24430fdc8d8SChris Lattner { 245431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 246ceb6b139SCaroline Tice 247ceb6b139SCaroline Tice 248ceb6b139SCaroline Tice if (log) 249cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 250cfd1acedSGreg Clayton fh, transfer_ownership); 251ceb6b139SCaroline Tice 2526611103cSGreg Clayton if (m_opaque_sp) 2536611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 25430fdc8d8SChris Lattner } 25530fdc8d8SChris Lattner 25630fdc8d8SChris Lattner void 25730fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 25830fdc8d8SChris Lattner { 259431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 260ceb6b139SCaroline Tice 261ceb6b139SCaroline Tice 262ceb6b139SCaroline Tice if (log) 263cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 264cfd1acedSGreg Clayton fh, transfer_ownership); 265ceb6b139SCaroline Tice 2666611103cSGreg Clayton if (m_opaque_sp) 2676611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 26830fdc8d8SChris Lattner } 26930fdc8d8SChris Lattner 27030fdc8d8SChris Lattner FILE * 27130fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 27230fdc8d8SChris Lattner { 2736611103cSGreg Clayton if (m_opaque_sp) 27451b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 2756611103cSGreg Clayton return NULL; 27630fdc8d8SChris Lattner } 27730fdc8d8SChris Lattner 27830fdc8d8SChris Lattner FILE * 27930fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 28030fdc8d8SChris Lattner { 2816611103cSGreg Clayton if (m_opaque_sp) 28251b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2836611103cSGreg Clayton return NULL; 28430fdc8d8SChris Lattner } 28530fdc8d8SChris Lattner 28630fdc8d8SChris Lattner FILE * 28730fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 28830fdc8d8SChris Lattner { 2896611103cSGreg Clayton if (m_opaque_sp) 29051b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2916611103cSGreg Clayton return NULL; 29230fdc8d8SChris Lattner } 29330fdc8d8SChris Lattner 29430fdc8d8SChris Lattner SBCommandInterpreter 29530fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 29630fdc8d8SChris Lattner { 297431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 298ceb6b139SCaroline Tice 2996611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 3006611103cSGreg Clayton if (m_opaque_sp) 3016611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 302ceb6b139SCaroline Tice 303750cd175SCaroline Tice if (log) 30493aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 305750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 306750cd175SCaroline Tice 30730fdc8d8SChris Lattner return sb_interpreter; 30830fdc8d8SChris Lattner } 30930fdc8d8SChris Lattner 31030fdc8d8SChris Lattner void 31130fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 31230fdc8d8SChris Lattner { 3136611103cSGreg Clayton if (m_opaque_sp) 3146611103cSGreg Clayton { 315af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 316af67cecdSGreg Clayton Mutex::Locker api_locker; 317af67cecdSGreg Clayton if (target_sp) 31810ebffa4SJim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 319af67cecdSGreg Clayton 3206611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 32130fdc8d8SChris Lattner SBCommandReturnObject result; 32230fdc8d8SChris Lattner 32330fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 32430fdc8d8SChris Lattner 32530fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 32630fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 32730fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 32830fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 32930fdc8d8SChris Lattner 3306611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 33130fdc8d8SChris Lattner { 3326611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 333b9556accSGreg Clayton ProcessSP process_sp (process.GetSP()); 334b9556accSGreg Clayton if (process_sp) 33530fdc8d8SChris Lattner { 33630fdc8d8SChris Lattner EventSP event_sp; 3376611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 338b9556accSGreg Clayton while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp)) 33930fdc8d8SChris Lattner { 34030fdc8d8SChris Lattner SBEvent event(event_sp); 34130fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 34230fdc8d8SChris Lattner } 34330fdc8d8SChris Lattner } 34430fdc8d8SChris Lattner } 34530fdc8d8SChris Lattner } 3466611103cSGreg Clayton } 34730fdc8d8SChris Lattner 34830fdc8d8SChris Lattner SBListener 34930fdc8d8SChris Lattner SBDebugger::GetListener () 35030fdc8d8SChris Lattner { 351431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 352ceb6b139SCaroline Tice 3536611103cSGreg Clayton SBListener sb_listener; 3546611103cSGreg Clayton if (m_opaque_sp) 3556611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 356ceb6b139SCaroline Tice 357750cd175SCaroline Tice if (log) 35893aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 359750cd175SCaroline Tice sb_listener.get()); 360750cd175SCaroline Tice 36130fdc8d8SChris Lattner return sb_listener; 36230fdc8d8SChris Lattner } 36330fdc8d8SChris Lattner 36430fdc8d8SChris Lattner void 36530fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 36630fdc8d8SChris Lattner { 367af67cecdSGreg Clayton if (!process.IsValid()) 368af67cecdSGreg Clayton return; 369af67cecdSGreg Clayton 370b9556accSGreg Clayton TargetSP target_sp (process.GetTarget().GetSP()); 371b9556accSGreg Clayton if (!target_sp) 372b9556accSGreg Clayton return; 373b9556accSGreg Clayton 37430fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 37530fdc8d8SChris Lattner char stdio_buffer[1024]; 37630fdc8d8SChris Lattner size_t len; 37730fdc8d8SChris Lattner 378b9556accSGreg Clayton Mutex::Locker api_locker (target_sp->GetAPIMutex()); 379af67cecdSGreg Clayton 380af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 38130fdc8d8SChris Lattner { 382af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 38330fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 38430fdc8d8SChris Lattner if (out != NULL) 38530fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 38630fdc8d8SChris Lattner } 387af67cecdSGreg Clayton 388af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 38930fdc8d8SChris Lattner { 390af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 39130fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 392af67cecdSGreg Clayton if (err != NULL) 393af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 39430fdc8d8SChris Lattner } 395af67cecdSGreg Clayton 396af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 39730fdc8d8SChris Lattner { 39830fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 39930fdc8d8SChris Lattner 40030fdc8d8SChris Lattner if (event_state == eStateInvalid) 40130fdc8d8SChris Lattner return; 40230fdc8d8SChris Lattner 40330fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 40430fdc8d8SChris Lattner if (!is_stopped) 4052976d00aSJim Ingham process.ReportEventState (event, out); 40630fdc8d8SChris Lattner } 40730fdc8d8SChris Lattner } 40830fdc8d8SChris Lattner 409e37d605eSJim Ingham SBSourceManager 41030fdc8d8SChris Lattner SBDebugger::GetSourceManager () 41130fdc8d8SChris Lattner { 412e37d605eSJim Ingham SBSourceManager sb_source_manager (*this); 413e37d605eSJim Ingham return sb_source_manager; 41430fdc8d8SChris Lattner } 41530fdc8d8SChris Lattner 41630fdc8d8SChris Lattner 41730fdc8d8SChris Lattner bool 41830fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 41930fdc8d8SChris Lattner { 42030fdc8d8SChris Lattner if (arch_name && arch_name_len) 42130fdc8d8SChris Lattner { 422431ce678SGreg Clayton ArchSpec default_arch = Target::GetDefaultArchitecture (); 423daccaa9eSCaroline Tice 42430fdc8d8SChris Lattner if (default_arch.IsValid()) 42530fdc8d8SChris Lattner { 426431ce678SGreg Clayton const std::string &triple_str = default_arch.GetTriple().str(); 427431ce678SGreg Clayton if (!triple_str.empty()) 428431ce678SGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str()); 429431ce678SGreg Clayton else 43064195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 43130fdc8d8SChris Lattner return true; 43230fdc8d8SChris Lattner } 43330fdc8d8SChris Lattner } 43430fdc8d8SChris Lattner if (arch_name && arch_name_len) 43530fdc8d8SChris Lattner arch_name[0] = '\0'; 43630fdc8d8SChris Lattner return false; 43730fdc8d8SChris Lattner } 43830fdc8d8SChris Lattner 43930fdc8d8SChris Lattner 44030fdc8d8SChris Lattner bool 44130fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 44230fdc8d8SChris Lattner { 44330fdc8d8SChris Lattner if (arch_name) 44430fdc8d8SChris Lattner { 44570512317SGreg Clayton ArchSpec arch (arch_name); 44630fdc8d8SChris Lattner if (arch.IsValid()) 44730fdc8d8SChris Lattner { 448431ce678SGreg Clayton Target::SetDefaultArchitecture (arch); 44930fdc8d8SChris Lattner return true; 45030fdc8d8SChris Lattner } 45130fdc8d8SChris Lattner } 45230fdc8d8SChris Lattner return false; 45330fdc8d8SChris Lattner } 45430fdc8d8SChris Lattner 45530fdc8d8SChris Lattner ScriptLanguage 45630fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 45730fdc8d8SChris Lattner { 458af67cecdSGreg Clayton 45930fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 46030fdc8d8SChris Lattner eScriptLanguageDefault, 46130fdc8d8SChris Lattner NULL); 46230fdc8d8SChris Lattner } 46330fdc8d8SChris Lattner 46430fdc8d8SChris Lattner const char * 46530fdc8d8SChris Lattner SBDebugger::GetVersionString () 46630fdc8d8SChris Lattner { 467431ce678SGreg Clayton return GetVersion(); 46830fdc8d8SChris Lattner } 46930fdc8d8SChris Lattner 47030fdc8d8SChris Lattner const char * 471431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state) 47230fdc8d8SChris Lattner { 473c2bbb49aSCaroline Tice return lldb_private::StateAsCString (state); 47430fdc8d8SChris Lattner } 47530fdc8d8SChris Lattner 47630fdc8d8SChris Lattner bool 477431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state) 47830fdc8d8SChris Lattner { 479431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4804838131bSGreg Clayton 481c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsRunningState (state); 4824838131bSGreg Clayton if (log) 4834838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 484431ce678SGreg Clayton StateAsCString (state), result); 4854838131bSGreg Clayton 4864838131bSGreg Clayton return result; 48730fdc8d8SChris Lattner } 48830fdc8d8SChris Lattner 48930fdc8d8SChris Lattner bool 490431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state) 49130fdc8d8SChris Lattner { 492431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 493ceb6b139SCaroline Tice 4942637f825SGreg Clayton const bool result = lldb_private::StateIsStoppedState (state, false); 495ceb6b139SCaroline Tice if (log) 4964838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 497431ce678SGreg Clayton StateAsCString (state), result); 498ceb6b139SCaroline Tice 4994838131bSGreg Clayton return result; 50030fdc8d8SChris Lattner } 50130fdc8d8SChris Lattner 502cac9c5f9SGreg Clayton lldb::SBTarget 503cac9c5f9SGreg Clayton SBDebugger::CreateTarget (const char *filename, 504cac9c5f9SGreg Clayton const char *target_triple, 505cac9c5f9SGreg Clayton const char *platform_name, 506cac9c5f9SGreg Clayton bool add_dependent_modules, 507cac9c5f9SGreg Clayton lldb::SBError& sb_error) 508cac9c5f9SGreg Clayton { 509cac9c5f9SGreg Clayton SBTarget sb_target; 510b9556accSGreg Clayton TargetSP target_sp; 511cac9c5f9SGreg Clayton if (m_opaque_sp) 512cac9c5f9SGreg Clayton { 513cac9c5f9SGreg Clayton sb_error.Clear(); 514cac9c5f9SGreg Clayton FileSpec filename_spec (filename, true); 515cac9c5f9SGreg Clayton OptionGroupPlatform platform_options (false); 516cac9c5f9SGreg Clayton platform_options.SetPlatformName (platform_name); 517cac9c5f9SGreg Clayton 518cac9c5f9SGreg Clayton sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 519cac9c5f9SGreg Clayton filename_spec, 520cac9c5f9SGreg Clayton target_triple, 521cac9c5f9SGreg Clayton add_dependent_modules, 522cac9c5f9SGreg Clayton &platform_options, 523cac9c5f9SGreg Clayton target_sp); 524cac9c5f9SGreg Clayton 525cac9c5f9SGreg Clayton if (sb_error.Success()) 526b9556accSGreg Clayton sb_target.SetSP (target_sp); 527cac9c5f9SGreg Clayton } 528cac9c5f9SGreg Clayton else 529cac9c5f9SGreg Clayton { 530cac9c5f9SGreg Clayton sb_error.SetErrorString("invalid target"); 531cac9c5f9SGreg Clayton } 532cac9c5f9SGreg Clayton 533cac9c5f9SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 534cac9c5f9SGreg Clayton if (log) 535cac9c5f9SGreg Clayton { 536cac9c5f9SGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)", 537cac9c5f9SGreg Clayton m_opaque_sp.get(), 538cac9c5f9SGreg Clayton filename, 539cac9c5f9SGreg Clayton target_triple, 540cac9c5f9SGreg Clayton platform_name, 541cac9c5f9SGreg Clayton add_dependent_modules, 542cac9c5f9SGreg Clayton sb_error.GetCString(), 543b9556accSGreg Clayton target_sp.get()); 544cac9c5f9SGreg Clayton } 545cac9c5f9SGreg Clayton 546cac9c5f9SGreg Clayton return sb_target; 547cac9c5f9SGreg Clayton } 54830fdc8d8SChris Lattner 54930fdc8d8SChris Lattner SBTarget 55030fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 55130fdc8d8SChris Lattner const char *target_triple) 55230fdc8d8SChris Lattner { 553b9556accSGreg Clayton SBTarget sb_target; 554b9556accSGreg Clayton TargetSP target_sp; 5556611103cSGreg Clayton if (m_opaque_sp) 5566611103cSGreg Clayton { 557274060b6SGreg Clayton FileSpec file_spec (filename, true); 55830fdc8d8SChris Lattner TargetSP target_sp; 559cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 560cac9c5f9SGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 561cac9c5f9SGreg Clayton file_spec, 562cac9c5f9SGreg Clayton target_triple, 563cac9c5f9SGreg Clayton add_dependent_modules, 564cac9c5f9SGreg Clayton NULL, 565cac9c5f9SGreg Clayton target_sp)); 566b9556accSGreg Clayton sb_target.SetSP (target_sp); 5676611103cSGreg Clayton } 5684838131bSGreg Clayton 569431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5704838131bSGreg Clayton if (log) 5714838131bSGreg Clayton { 572cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 573b9556accSGreg Clayton m_opaque_sp.get(), filename, target_triple, target_sp.get()); 5744838131bSGreg Clayton } 5754838131bSGreg Clayton 576b9556accSGreg Clayton return sb_target; 57730fdc8d8SChris Lattner } 57830fdc8d8SChris Lattner 57930fdc8d8SChris Lattner SBTarget 58064195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 58130fdc8d8SChris Lattner { 582431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 583ceb6b139SCaroline Tice 584b9556accSGreg Clayton SBTarget sb_target; 585b9556accSGreg Clayton TargetSP target_sp; 5866611103cSGreg Clayton if (m_opaque_sp) 5876611103cSGreg Clayton { 588274060b6SGreg Clayton FileSpec file (filename, true); 58930fdc8d8SChris Lattner Error error; 590cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 59130fdc8d8SChris Lattner 592cac9c5f9SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 593cac9c5f9SGreg Clayton file, 594cac9c5f9SGreg Clayton arch_cstr, 595cac9c5f9SGreg Clayton add_dependent_modules, 596cac9c5f9SGreg Clayton NULL, 597cac9c5f9SGreg Clayton target_sp); 59830fdc8d8SChris Lattner 59930fdc8d8SChris Lattner if (error.Success()) 6006611103cSGreg Clayton { 6012976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 602b9556accSGreg Clayton sb_target.SetSP (target_sp); 6036611103cSGreg Clayton } 6046611103cSGreg Clayton } 605ceb6b139SCaroline Tice 606ceb6b139SCaroline Tice if (log) 607ceb6b139SCaroline Tice { 608cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 609b9556accSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target_sp.get()); 610ceb6b139SCaroline Tice } 611ceb6b139SCaroline Tice 612b9556accSGreg Clayton return sb_target; 61330fdc8d8SChris Lattner } 61430fdc8d8SChris Lattner 61530fdc8d8SChris Lattner SBTarget 61630fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 61730fdc8d8SChris Lattner { 618b9556accSGreg Clayton SBTarget sb_target; 619b9556accSGreg Clayton TargetSP target_sp; 6206611103cSGreg Clayton if (m_opaque_sp) 6216611103cSGreg Clayton { 622274060b6SGreg Clayton FileSpec file (filename, true); 623431ce678SGreg Clayton ArchSpec arch = Target::GetDefaultArchitecture (); 62430fdc8d8SChris Lattner Error error; 625cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 62630fdc8d8SChris Lattner 627b3a40ba8SGreg Clayton PlatformSP platform_sp(m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 628cac9c5f9SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 629cac9c5f9SGreg Clayton file, 630cac9c5f9SGreg Clayton arch, 631cac9c5f9SGreg Clayton add_dependent_modules, 632b3a40ba8SGreg Clayton platform_sp, 633cac9c5f9SGreg Clayton target_sp); 63430fdc8d8SChris Lattner 6356611103cSGreg Clayton if (error.Success()) 6366611103cSGreg Clayton { 6372976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 638b9556accSGreg Clayton sb_target.SetSP (target_sp); 6396611103cSGreg Clayton } 6406611103cSGreg Clayton } 641431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6424838131bSGreg Clayton if (log) 6434838131bSGreg Clayton { 644cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 645b9556accSGreg Clayton m_opaque_sp.get(), filename, target_sp.get()); 6464838131bSGreg Clayton } 647b9556accSGreg Clayton return sb_target; 64830fdc8d8SChris Lattner } 64930fdc8d8SChris Lattner 6503794ad95SJohnny Chen bool 6513794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target) 6523794ad95SJohnny Chen { 6533794ad95SJohnny Chen bool result = false; 654b9556accSGreg Clayton if (m_opaque_sp) 655b9556accSGreg Clayton { 656b9556accSGreg Clayton TargetSP target_sp(target.GetSP()); 657b9556accSGreg Clayton if (target_sp) 6583794ad95SJohnny Chen { 6593794ad95SJohnny Chen // No need to lock, the target list is thread safe 660b9556accSGreg Clayton result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp); 661b9556accSGreg Clayton target_sp->Destroy(); 66275340622SGreg Clayton target.Clear(); 6630cd70866SGreg Clayton const bool mandatory = true; 6640cd70866SGreg Clayton ModuleList::RemoveOrphanSharedModules(mandatory); 6653794ad95SJohnny Chen } 666b9556accSGreg Clayton } 6673794ad95SJohnny Chen 6683794ad95SJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6693794ad95SJohnny Chen if (log) 6703794ad95SJohnny Chen { 6713794ad95SJohnny Chen log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result); 6723794ad95SJohnny Chen } 6733794ad95SJohnny Chen 6743794ad95SJohnny Chen return result; 6753794ad95SJohnny Chen } 67630fdc8d8SChris Lattner SBTarget 67730fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 67830fdc8d8SChris Lattner { 6796611103cSGreg Clayton SBTarget sb_target; 6806611103cSGreg Clayton if (m_opaque_sp) 681af67cecdSGreg Clayton { 682af67cecdSGreg Clayton // No need to lock, the target list is thread safe 683b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 684af67cecdSGreg Clayton } 68530fdc8d8SChris Lattner return sb_target; 68630fdc8d8SChris Lattner } 68730fdc8d8SChris Lattner 6888499e1a4SJim Ingham uint32_t 6898499e1a4SJim Ingham SBDebugger::GetIndexOfTarget (lldb::SBTarget target) 6908499e1a4SJim Ingham { 6918499e1a4SJim Ingham 6928499e1a4SJim Ingham lldb::TargetSP target_sp = target.GetSP(); 6938499e1a4SJim Ingham if (!target_sp) 6948499e1a4SJim Ingham return UINT32_MAX; 6958499e1a4SJim Ingham 6968499e1a4SJim Ingham if (!m_opaque_sp) 6978499e1a4SJim Ingham return UINT32_MAX; 6988499e1a4SJim Ingham 6998499e1a4SJim Ingham return m_opaque_sp->GetTargetList().GetIndexOfTarget (target.GetSP()); 7008499e1a4SJim Ingham } 7018499e1a4SJim Ingham 70230fdc8d8SChris Lattner SBTarget 70330fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 70430fdc8d8SChris Lattner { 7056611103cSGreg Clayton SBTarget sb_target; 7066611103cSGreg Clayton if (m_opaque_sp) 707af67cecdSGreg Clayton { 708af67cecdSGreg Clayton // No need to lock, the target list is thread safe 709b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 710af67cecdSGreg Clayton } 71130fdc8d8SChris Lattner return sb_target; 71230fdc8d8SChris Lattner } 71330fdc8d8SChris Lattner 71430fdc8d8SChris Lattner SBTarget 71530fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 71630fdc8d8SChris Lattner { 7176611103cSGreg Clayton SBTarget sb_target; 7186611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 7196611103cSGreg Clayton { 720af67cecdSGreg Clayton // No need to lock, the target list is thread safe 721eb0103f2SGreg Clayton ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 722274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 723b9556accSGreg Clayton sb_target.SetSP (target_sp); 7246611103cSGreg Clayton } 7256611103cSGreg Clayton return sb_target; 72630fdc8d8SChris Lattner } 72730fdc8d8SChris Lattner 72830fdc8d8SChris Lattner SBTarget 729431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp) 73030fdc8d8SChris Lattner { 7316611103cSGreg Clayton SBTarget sb_target; 7326611103cSGreg Clayton if (m_opaque_sp) 733af67cecdSGreg Clayton { 734af67cecdSGreg Clayton // No need to lock, the target list is thread safe 735b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 736af67cecdSGreg Clayton } 73730fdc8d8SChris Lattner return sb_target; 73830fdc8d8SChris Lattner } 73930fdc8d8SChris Lattner 74030fdc8d8SChris Lattner 74130fdc8d8SChris Lattner uint32_t 74230fdc8d8SChris Lattner SBDebugger::GetNumTargets () 74330fdc8d8SChris Lattner { 7446611103cSGreg Clayton if (m_opaque_sp) 745af67cecdSGreg Clayton { 746af67cecdSGreg Clayton // No need to lock, the target list is thread safe 7476611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 748af67cecdSGreg Clayton } 7496611103cSGreg Clayton return 0; 7506611103cSGreg Clayton } 75130fdc8d8SChris Lattner 75230fdc8d8SChris Lattner SBTarget 7532976d00aSJim Ingham SBDebugger::GetSelectedTarget () 75430fdc8d8SChris Lattner { 755431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 756ceb6b139SCaroline Tice 7576611103cSGreg Clayton SBTarget sb_target; 758b9556accSGreg Clayton TargetSP target_sp; 7596611103cSGreg Clayton if (m_opaque_sp) 760af67cecdSGreg Clayton { 761af67cecdSGreg Clayton // No need to lock, the target list is thread safe 762b9556accSGreg Clayton target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget (); 763b9556accSGreg Clayton sb_target.SetSP (target_sp); 764af67cecdSGreg Clayton } 765ceb6b139SCaroline Tice 766ceb6b139SCaroline Tice if (log) 767ceb6b139SCaroline Tice { 768ceb6b139SCaroline Tice SBStream sstr; 769431ce678SGreg Clayton sb_target.GetDescription (sstr, eDescriptionLevelBrief); 77093aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 771b9556accSGreg Clayton target_sp.get(), sstr.GetData()); 772ceb6b139SCaroline Tice } 773ceb6b139SCaroline Tice 77430fdc8d8SChris Lattner return sb_target; 77530fdc8d8SChris Lattner } 77630fdc8d8SChris Lattner 77730fdc8d8SChris Lattner void 778e64f0dc7SJim Ingham SBDebugger::SetSelectedTarget (SBTarget &sb_target) 779e64f0dc7SJim Ingham { 780e64f0dc7SJim Ingham LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 781e64f0dc7SJim Ingham 782b9556accSGreg Clayton TargetSP target_sp (sb_target.GetSP()); 783e64f0dc7SJim Ingham if (m_opaque_sp) 784e64f0dc7SJim Ingham { 785b9556accSGreg Clayton m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 786e64f0dc7SJim Ingham } 787e64f0dc7SJim Ingham if (log) 788e64f0dc7SJim Ingham { 789e64f0dc7SJim Ingham SBStream sstr; 790e64f0dc7SJim Ingham sb_target.GetDescription (sstr, eDescriptionLevelBrief); 791e64f0dc7SJim Ingham log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 792b9556accSGreg Clayton target_sp.get(), sstr.GetData()); 793e64f0dc7SJim Ingham } 794e64f0dc7SJim Ingham } 795e64f0dc7SJim Ingham 796e64f0dc7SJim Ingham void 797c30a73adSEnrico Granata SBDebugger::DispatchInput (void* baton, const void *data, size_t data_len) 7986b09d423SEnrico Granata { 7996b09d423SEnrico Granata DispatchInput (data,data_len); 8006b09d423SEnrico Granata } 8016b09d423SEnrico Granata 8026b09d423SEnrico Granata void 803c3019991SFilipe Cabecinhas SBDebugger::DispatchInput (const void *data, size_t data_len) 80430fdc8d8SChris Lattner { 805431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 806ceb6b139SCaroline Tice 807ceb6b139SCaroline Tice if (log) 808*43e0af06SGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\", size_t=%llu)", 809*43e0af06SGreg Clayton m_opaque_sp.get(), 810*43e0af06SGreg Clayton (int) data_len, 811*43e0af06SGreg Clayton (const char *) data, 812*43e0af06SGreg Clayton (uint64_t)data_len); 813ceb6b139SCaroline Tice 8146611103cSGreg Clayton if (m_opaque_sp) 8156611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 81630fdc8d8SChris Lattner } 81730fdc8d8SChris Lattner 81830fdc8d8SChris Lattner void 819efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 820efed6131SCaroline Tice { 821efed6131SCaroline Tice if (m_opaque_sp) 822efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 823efed6131SCaroline Tice } 824efed6131SCaroline Tice 825efed6131SCaroline Tice void 826efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 827efed6131SCaroline Tice { 828efed6131SCaroline Tice if (m_opaque_sp) 829efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 830efed6131SCaroline Tice } 8319088b068SCaroline Tice 8329088b068SCaroline Tice bool 8339088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader) 8349088b068SCaroline Tice { 8359088b068SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 8369088b068SCaroline Tice 8379088b068SCaroline Tice if (log) 8389088b068SCaroline Tice log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 8399088b068SCaroline Tice 8409088b068SCaroline Tice if (m_opaque_sp && reader.IsValid()) 8419088b068SCaroline Tice { 8429088b068SCaroline Tice InputReaderSP reader_sp (*reader); 8439088b068SCaroline Tice return m_opaque_sp->InputReaderIsTopReader (reader_sp); 8449088b068SCaroline Tice } 8459088b068SCaroline Tice 8469088b068SCaroline Tice return false; 8479088b068SCaroline Tice } 8489088b068SCaroline Tice 849efed6131SCaroline Tice 850efed6131SCaroline Tice void 85130fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 85230fdc8d8SChris Lattner { 853431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 854ceb6b139SCaroline Tice 855ceb6b139SCaroline Tice if (log) 85693aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 857ceb6b139SCaroline Tice 8586611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 85930fdc8d8SChris Lattner { 860af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 861af67cecdSGreg Clayton Mutex::Locker api_locker; 862af67cecdSGreg Clayton if (target_sp) 86310ebffa4SJim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 86430fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 8656611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 86630fdc8d8SChris Lattner } 86730fdc8d8SChris Lattner } 8686611103cSGreg Clayton 8696611103cSGreg Clayton void 870969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification) 871969ed3d1SCaroline Tice { 872969ed3d1SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 873969ed3d1SCaroline Tice 874969ed3d1SCaroline Tice if (log) 875969ed3d1SCaroline Tice log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification); 876969ed3d1SCaroline Tice 877969ed3d1SCaroline Tice if (m_opaque_sp) 878969ed3d1SCaroline Tice m_opaque_sp->NotifyTopInputReader (notification); 879969ed3d1SCaroline Tice } 880969ed3d1SCaroline Tice 881969ed3d1SCaroline Tice void 882431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp) 8836611103cSGreg Clayton { 8846611103cSGreg Clayton m_opaque_sp = debugger_sp; 8856611103cSGreg Clayton } 8866611103cSGreg Clayton 8876611103cSGreg Clayton Debugger * 8886611103cSGreg Clayton SBDebugger::get () const 8896611103cSGreg Clayton { 8906611103cSGreg Clayton return m_opaque_sp.get(); 8916611103cSGreg Clayton } 8926611103cSGreg Clayton 8936611103cSGreg Clayton Debugger & 8946611103cSGreg Clayton SBDebugger::ref () const 8956611103cSGreg Clayton { 8966611103cSGreg Clayton assert (m_opaque_sp.get()); 8976611103cSGreg Clayton return *m_opaque_sp; 8986611103cSGreg Clayton } 8996611103cSGreg Clayton 9009a37766eSGreg Clayton const lldb::DebuggerSP & 9019a37766eSGreg Clayton SBDebugger::get_sp () const 9029a37766eSGreg Clayton { 9039a37766eSGreg Clayton return m_opaque_sp; 9049a37766eSGreg Clayton } 9056611103cSGreg Clayton 906ebc1bb27SCaroline Tice SBDebugger 907ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 908ebc1bb27SCaroline Tice { 909af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 910ebc1bb27SCaroline Tice SBDebugger sb_debugger; 911431ce678SGreg Clayton DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 912ebc1bb27SCaroline Tice if (debugger_sp) 913ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 914ebc1bb27SCaroline Tice return sb_debugger; 915ebc1bb27SCaroline Tice } 916e40e4218SJim Ingham 917dd759857SCaroline Tice const char * 918dd759857SCaroline Tice SBDebugger::GetInstanceName() 919dd759857SCaroline Tice { 9206920b52bSGreg Clayton if (m_opaque_sp) 9216920b52bSGreg Clayton return m_opaque_sp->GetInstanceName().AsCString(); 9226920b52bSGreg Clayton else 923dd759857SCaroline Tice return NULL; 924dd759857SCaroline Tice } 925dd759857SCaroline Tice 9263df9a8dfSCaroline Tice SBError 927dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 9283df9a8dfSCaroline Tice { 9296920b52bSGreg Clayton SBError sb_error; 9306920b52bSGreg Clayton DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name))); 9316920b52bSGreg Clayton Error error; 9326920b52bSGreg Clayton if (debugger_sp) 9336920b52bSGreg Clayton { 9346920b52bSGreg Clayton ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext()); 9356920b52bSGreg Clayton error = debugger_sp->SetPropertyValue (&exe_ctx, 9366920b52bSGreg Clayton eVarSetOperationAssign, 9376920b52bSGreg Clayton var_name, 9386920b52bSGreg Clayton value); 9396920b52bSGreg Clayton } 9406920b52bSGreg Clayton else 9416920b52bSGreg Clayton { 9426920b52bSGreg Clayton error.SetErrorStringWithFormat ("invalid debugger instance name '%s'", debugger_instance_name); 9436920b52bSGreg Clayton } 9446920b52bSGreg Clayton if (error.Fail()) 9456920b52bSGreg Clayton sb_error.SetError(error); 9466920b52bSGreg Clayton return sb_error; 9473df9a8dfSCaroline Tice } 9483df9a8dfSCaroline Tice 949431ce678SGreg Clayton SBStringList 950dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 9513df9a8dfSCaroline Tice { 9523df9a8dfSCaroline Tice SBStringList ret_value; 9536920b52bSGreg Clayton DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name))); 9546920b52bSGreg Clayton Error error; 9556920b52bSGreg Clayton if (debugger_sp) 9566920b52bSGreg Clayton { 9576920b52bSGreg Clayton ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext()); 9586920b52bSGreg Clayton lldb::OptionValueSP value_sp (debugger_sp->GetPropertyValue (&exe_ctx, 9596920b52bSGreg Clayton var_name, 9606920b52bSGreg Clayton false, 9616920b52bSGreg Clayton error)); 9626920b52bSGreg Clayton if (value_sp) 9636920b52bSGreg Clayton { 9646920b52bSGreg Clayton StreamString value_strm; 9656920b52bSGreg Clayton value_sp->DumpValue (&exe_ctx, value_strm, OptionValue::eDumpOptionValue); 9666920b52bSGreg Clayton const std::string &value_str = value_strm.GetString(); 9676920b52bSGreg Clayton if (!value_str.empty()) 9686920b52bSGreg Clayton { 9696920b52bSGreg Clayton StringList string_list; 9706920b52bSGreg Clayton string_list.SplitIntoLines(value_str.c_str(), value_str.size()); 9716920b52bSGreg Clayton return SBStringList(&string_list); 9726920b52bSGreg Clayton } 9736920b52bSGreg Clayton } 9746920b52bSGreg Clayton } 9756920b52bSGreg Clayton return SBStringList(); 9763df9a8dfSCaroline Tice } 9773df9a8dfSCaroline Tice 978a7015092SGreg Clayton uint32_t 979a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 980a7015092SGreg Clayton { 981a7015092SGreg Clayton if (m_opaque_sp) 982a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 983a7015092SGreg Clayton return 0; 984a7015092SGreg Clayton } 985a7015092SGreg Clayton 986a7015092SGreg Clayton void 987a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 988a7015092SGreg Clayton { 989a7015092SGreg Clayton if (m_opaque_sp) 990a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 991a7015092SGreg Clayton } 992a7015092SGreg Clayton 993a7015092SGreg Clayton const char * 994a7015092SGreg Clayton SBDebugger::GetPrompt() const 995a7015092SGreg Clayton { 996431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 997ceb6b139SCaroline Tice 998ceb6b139SCaroline Tice if (log) 999cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 1000750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 1001ceb6b139SCaroline Tice 1002a7015092SGreg Clayton if (m_opaque_sp) 1003a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 1004a7015092SGreg Clayton return 0; 1005a7015092SGreg Clayton } 1006a7015092SGreg Clayton 1007a7015092SGreg Clayton void 1008a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 1009a7015092SGreg Clayton { 1010a7015092SGreg Clayton if (m_opaque_sp) 1011a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 1012a7015092SGreg Clayton } 1013a7015092SGreg Clayton 1014a7015092SGreg Clayton 1015431ce678SGreg Clayton ScriptLanguage 1016a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 1017a7015092SGreg Clayton { 1018a7015092SGreg Clayton if (m_opaque_sp) 1019a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 1020a7015092SGreg Clayton return eScriptLanguageNone; 1021a7015092SGreg Clayton } 1022a7015092SGreg Clayton 1023a7015092SGreg Clayton void 1024431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang) 1025a7015092SGreg Clayton { 1026a7015092SGreg Clayton if (m_opaque_sp) 1027af67cecdSGreg Clayton { 1028a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 1029a7015092SGreg Clayton } 1030af67cecdSGreg Clayton } 1031a7015092SGreg Clayton 1032e40e4218SJim Ingham bool 1033e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 1034e40e4218SJim Ingham { 1035e40e4218SJim Ingham if (m_opaque_sp) 1036e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 1037e40e4218SJim Ingham return false; 1038e40e4218SJim Ingham } 1039e40e4218SJim Ingham 1040e40e4218SJim Ingham bool 1041daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 1042e40e4218SJim Ingham { 1043e40e4218SJim Ingham if (m_opaque_sp) 1044daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 1045e40e4218SJim Ingham return false; 1046e40e4218SJim Ingham } 1047e40e4218SJim Ingham 1048dde9cff3SCaroline Tice bool 1049dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 1050dde9cff3SCaroline Tice { 1051da7bc7d0SGreg Clayton Stream &strm = description.ref(); 1052da7bc7d0SGreg Clayton 1053dde9cff3SCaroline Tice if (m_opaque_sp) 1054dde9cff3SCaroline Tice { 1055dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 1056431ce678SGreg Clayton user_id_t id = m_opaque_sp->GetID(); 1057da7bc7d0SGreg Clayton strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id); 1058dde9cff3SCaroline Tice } 1059dde9cff3SCaroline Tice else 1060da7bc7d0SGreg Clayton strm.PutCString ("No value"); 1061dde9cff3SCaroline Tice 1062dde9cff3SCaroline Tice return true; 1063dde9cff3SCaroline Tice } 1064efed6131SCaroline Tice 1065431ce678SGreg Clayton user_id_t 1066efed6131SCaroline Tice SBDebugger::GetID() 1067efed6131SCaroline Tice { 1068efed6131SCaroline Tice if (m_opaque_sp) 1069efed6131SCaroline Tice return m_opaque_sp->GetID(); 1070efed6131SCaroline Tice return LLDB_INVALID_UID; 1071efed6131SCaroline Tice } 10722289fa48SGreg Clayton 10732289fa48SGreg Clayton 10742289fa48SGreg Clayton SBError 10752289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name) 10762289fa48SGreg Clayton { 10772289fa48SGreg Clayton SBError sb_error; 10782289fa48SGreg Clayton if (m_opaque_sp) 10792289fa48SGreg Clayton { 10802289fa48SGreg Clayton PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref())); 10812289fa48SGreg Clayton 10822289fa48SGreg Clayton if (platform_sp) 10832289fa48SGreg Clayton { 10842289fa48SGreg Clayton bool make_selected = true; 10852289fa48SGreg Clayton m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected); 10862289fa48SGreg Clayton } 10872289fa48SGreg Clayton } 10882289fa48SGreg Clayton return sb_error; 10892289fa48SGreg Clayton } 10902289fa48SGreg Clayton 1091fc3f027dSGreg Clayton bool 1092f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot) 1093f3dd93c8SGreg Clayton { 1094f3dd93c8SGreg Clayton if (m_opaque_sp) 1095f3dd93c8SGreg Clayton { 1096f3dd93c8SGreg Clayton PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 1097f3dd93c8SGreg Clayton 1098f3dd93c8SGreg Clayton if (platform_sp) 1099f3dd93c8SGreg Clayton { 1100f3dd93c8SGreg Clayton platform_sp->SetSDKRootDirectory (ConstString (sysroot)); 1101f3dd93c8SGreg Clayton return true; 1102f3dd93c8SGreg Clayton } 1103f3dd93c8SGreg Clayton } 1104f3dd93c8SGreg Clayton return false; 1105f3dd93c8SGreg Clayton } 1106f3dd93c8SGreg Clayton 1107f3dd93c8SGreg Clayton bool 1108fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const 1109fc3f027dSGreg Clayton { 1110fc3f027dSGreg Clayton if (m_opaque_sp) 1111fc3f027dSGreg Clayton return m_opaque_sp->GetCloseInputOnEOF (); 1112fc3f027dSGreg Clayton return false; 1113fc3f027dSGreg Clayton } 1114fc3f027dSGreg Clayton 1115fc3f027dSGreg Clayton void 1116fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b) 1117fc3f027dSGreg Clayton { 1118fc3f027dSGreg Clayton if (m_opaque_sp) 1119fc3f027dSGreg Clayton m_opaque_sp->SetCloseInputOnEOF (b); 1120fc3f027dSGreg Clayton } 1121061858ceSEnrico Granata 1122061858ceSEnrico Granata SBTypeCategory 1123061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name) 1124061858ceSEnrico Granata { 1125061858ceSEnrico Granata if (!category_name || *category_name == 0) 1126061858ceSEnrico Granata return SBTypeCategory(); 1127061858ceSEnrico Granata 1128061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1129061858ceSEnrico Granata 1130061858ceSEnrico Granata if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false)) 1131061858ceSEnrico Granata return SBTypeCategory(category_sp); 1132061858ceSEnrico Granata else 1133061858ceSEnrico Granata return SBTypeCategory(); 1134061858ceSEnrico Granata } 1135061858ceSEnrico Granata 1136061858ceSEnrico Granata SBTypeCategory 1137061858ceSEnrico Granata SBDebugger::CreateCategory (const char* category_name) 1138061858ceSEnrico Granata { 1139061858ceSEnrico Granata if (!category_name || *category_name == 0) 1140061858ceSEnrico Granata return SBTypeCategory(); 1141061858ceSEnrico Granata 1142061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1143061858ceSEnrico Granata 1144061858ceSEnrico Granata if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, true)) 1145061858ceSEnrico Granata return SBTypeCategory(category_sp); 1146061858ceSEnrico Granata else 1147061858ceSEnrico Granata return SBTypeCategory(); 1148061858ceSEnrico Granata } 1149061858ceSEnrico Granata 1150061858ceSEnrico Granata bool 1151061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name) 1152061858ceSEnrico Granata { 1153061858ceSEnrico Granata if (!category_name || *category_name == 0) 1154061858ceSEnrico Granata return false; 1155061858ceSEnrico Granata 1156061858ceSEnrico Granata return DataVisualization::Categories::Delete(ConstString(category_name)); 1157061858ceSEnrico Granata } 1158061858ceSEnrico Granata 1159061858ceSEnrico Granata uint32_t 1160061858ceSEnrico Granata SBDebugger::GetNumCategories() 1161061858ceSEnrico Granata { 1162061858ceSEnrico Granata return DataVisualization::Categories::GetCount(); 1163061858ceSEnrico Granata } 1164061858ceSEnrico Granata 1165061858ceSEnrico Granata SBTypeCategory 1166061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index) 1167061858ceSEnrico Granata { 1168061858ceSEnrico Granata return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)); 1169061858ceSEnrico Granata } 1170061858ceSEnrico Granata 1171061858ceSEnrico Granata SBTypeCategory 1172061858ceSEnrico Granata SBDebugger::GetDefaultCategory() 1173061858ceSEnrico Granata { 1174061858ceSEnrico Granata return GetCategory("default"); 1175061858ceSEnrico Granata } 1176061858ceSEnrico Granata 1177061858ceSEnrico Granata SBTypeFormat 1178061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name) 1179061858ceSEnrico Granata { 1180061858ceSEnrico Granata SBTypeCategory default_category_sb = GetDefaultCategory(); 1181061858ceSEnrico Granata if (default_category_sb.GetEnabled()) 1182061858ceSEnrico Granata return default_category_sb.GetFormatForType(type_name); 1183061858ceSEnrico Granata return SBTypeFormat(); 1184061858ceSEnrico Granata } 1185061858ceSEnrico Granata 1186cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON 1187061858ceSEnrico Granata SBTypeSummary 1188061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name) 1189061858ceSEnrico Granata { 1190a777dc2aSEnrico Granata if (type_name.IsValid() == false) 1191a777dc2aSEnrico Granata return SBTypeSummary(); 1192a777dc2aSEnrico Granata return SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP())); 1193061858ceSEnrico Granata } 1194cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON 1195061858ceSEnrico Granata 1196061858ceSEnrico Granata SBTypeFilter 1197061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name) 1198061858ceSEnrico Granata { 1199a777dc2aSEnrico Granata if (type_name.IsValid() == false) 1200a777dc2aSEnrico Granata return SBTypeFilter(); 1201a777dc2aSEnrico Granata return SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP())); 1202061858ceSEnrico Granata } 1203061858ceSEnrico Granata 1204cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON 1205061858ceSEnrico Granata SBTypeSynthetic 1206061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name) 1207061858ceSEnrico Granata { 1208a777dc2aSEnrico Granata if (type_name.IsValid() == false) 1209a777dc2aSEnrico Granata return SBTypeSynthetic(); 1210a777dc2aSEnrico Granata return SBTypeSynthetic(DataVisualization::GetSyntheticForType(type_name.GetSP())); 1211061858ceSEnrico Granata } 1212cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON 1213061858ceSEnrico Granata 1214228063cdSJim Ingham bool 1215228063cdSJim Ingham SBDebugger::EnableLog (const char *channel, const char **categories) 1216228063cdSJim Ingham { 1217228063cdSJim Ingham if (m_opaque_sp) 1218228063cdSJim Ingham { 1219228063cdSJim Ingham uint32_t log_options = LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME; 1220228063cdSJim Ingham StreamString errors; 1221228063cdSJim Ingham return m_opaque_sp->EnableLog (channel, categories, NULL, log_options, errors); 1222228063cdSJim Ingham 1223228063cdSJim Ingham } 1224228063cdSJim Ingham else 1225228063cdSJim Ingham return false; 1226228063cdSJim Ingham } 12274f02b22dSJim Ingham 12284f02b22dSJim Ingham void 12294f02b22dSJim Ingham SBDebugger::SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton) 12304f02b22dSJim Ingham { 12314f02b22dSJim Ingham if (m_opaque_sp) 12324f02b22dSJim Ingham { 12334f02b22dSJim Ingham return m_opaque_sp->SetLoggingCallback (log_callback, baton); 12344f02b22dSJim Ingham } 12354f02b22dSJim Ingham } 12364f02b22dSJim Ingham 12374f02b22dSJim Ingham 1238