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 { 146f9322415SGreg Clayton ModuleList::RemoveOrphanSharedModules(); 147f9322415SGreg Clayton } 148f9322415SGreg Clayton 1496611103cSGreg Clayton SBDebugger::SBDebugger () : 1506611103cSGreg Clayton m_opaque_sp () 1516611103cSGreg Clayton { 1526611103cSGreg Clayton } 1536611103cSGreg Clayton 154274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) : 155274fd6e9SEnrico Granata m_opaque_sp(debugger_sp) 156274fd6e9SEnrico Granata { 157274fd6e9SEnrico Granata } 158274fd6e9SEnrico Granata 159efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 160efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 161efabb123SGreg Clayton { 162efabb123SGreg Clayton } 163efabb123SGreg Clayton 164efabb123SGreg Clayton SBDebugger & 165efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 166efabb123SGreg Clayton { 167efabb123SGreg Clayton if (this != &rhs) 168efabb123SGreg Clayton { 169efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 170efabb123SGreg Clayton } 171efabb123SGreg Clayton return *this; 172efabb123SGreg Clayton } 173efabb123SGreg Clayton 1746611103cSGreg Clayton SBDebugger::~SBDebugger () 1756611103cSGreg Clayton { 1766611103cSGreg Clayton } 1776611103cSGreg Clayton 1786611103cSGreg Clayton bool 1796611103cSGreg Clayton SBDebugger::IsValid() const 1806611103cSGreg Clayton { 1816611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1826611103cSGreg Clayton } 1836611103cSGreg Clayton 1846611103cSGreg Clayton 18530fdc8d8SChris Lattner void 18630fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 18730fdc8d8SChris Lattner { 1886611103cSGreg Clayton if (m_opaque_sp) 1896611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 19030fdc8d8SChris Lattner } 19130fdc8d8SChris Lattner 192e64f0dc7SJim Ingham bool 193e64f0dc7SJim Ingham SBDebugger::GetAsync () 194e64f0dc7SJim Ingham { 195e64f0dc7SJim Ingham if (m_opaque_sp) 196e64f0dc7SJim Ingham return m_opaque_sp->GetAsyncExecution(); 197e64f0dc7SJim Ingham else 198e64f0dc7SJim Ingham return false; 199e64f0dc7SJim Ingham } 200e64f0dc7SJim Ingham 2016eee5aa0SGreg Clayton void 2026eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 2036eee5aa0SGreg Clayton { 2046eee5aa0SGreg Clayton if (m_opaque_sp) 2056eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 2066eee5aa0SGreg Clayton } 2076eee5aa0SGreg Clayton 20816e0c686SJim Ingham void 20916e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b) 21016e0c686SJim Ingham { 21116e0c686SJim Ingham if (m_opaque_sp) 21216e0c686SJim Ingham m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b); 21316e0c686SJim Ingham } 21416e0c686SJim Ingham 21530fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 21630fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 21730fdc8d8SChris Lattner void 21830fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 21930fdc8d8SChris Lattner { 220431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 221ceb6b139SCaroline Tice 222ceb6b139SCaroline Tice if (log) 223cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 224cfd1acedSGreg Clayton fh, transfer_ownership); 225ceb6b139SCaroline Tice 2266611103cSGreg Clayton if (m_opaque_sp) 2276611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 22830fdc8d8SChris Lattner } 22930fdc8d8SChris Lattner 23030fdc8d8SChris Lattner void 23130fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 23230fdc8d8SChris Lattner { 233431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 234ceb6b139SCaroline Tice 235ceb6b139SCaroline Tice 236ceb6b139SCaroline Tice if (log) 237cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 238cfd1acedSGreg Clayton fh, transfer_ownership); 239ceb6b139SCaroline Tice 2406611103cSGreg Clayton if (m_opaque_sp) 2416611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 24230fdc8d8SChris Lattner } 24330fdc8d8SChris Lattner 24430fdc8d8SChris Lattner void 24530fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 24630fdc8d8SChris Lattner { 247431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 248ceb6b139SCaroline Tice 249ceb6b139SCaroline Tice 250ceb6b139SCaroline Tice if (log) 251cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 252cfd1acedSGreg Clayton fh, transfer_ownership); 253ceb6b139SCaroline Tice 2546611103cSGreg Clayton if (m_opaque_sp) 2556611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 25630fdc8d8SChris Lattner } 25730fdc8d8SChris Lattner 25830fdc8d8SChris Lattner FILE * 25930fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 26030fdc8d8SChris Lattner { 2616611103cSGreg Clayton if (m_opaque_sp) 26251b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 2636611103cSGreg Clayton return NULL; 26430fdc8d8SChris Lattner } 26530fdc8d8SChris Lattner 26630fdc8d8SChris Lattner FILE * 26730fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 26830fdc8d8SChris Lattner { 2696611103cSGreg Clayton if (m_opaque_sp) 27051b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2716611103cSGreg Clayton return NULL; 27230fdc8d8SChris Lattner } 27330fdc8d8SChris Lattner 27430fdc8d8SChris Lattner FILE * 27530fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 27630fdc8d8SChris Lattner { 2776611103cSGreg Clayton if (m_opaque_sp) 27851b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2796611103cSGreg Clayton return NULL; 28030fdc8d8SChris Lattner } 28130fdc8d8SChris Lattner 28230fdc8d8SChris Lattner SBCommandInterpreter 28330fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 28430fdc8d8SChris Lattner { 285431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 286ceb6b139SCaroline Tice 2876611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 2886611103cSGreg Clayton if (m_opaque_sp) 2896611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 290ceb6b139SCaroline Tice 291750cd175SCaroline Tice if (log) 29293aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 293750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 294750cd175SCaroline Tice 29530fdc8d8SChris Lattner return sb_interpreter; 29630fdc8d8SChris Lattner } 29730fdc8d8SChris Lattner 29830fdc8d8SChris Lattner void 29930fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 30030fdc8d8SChris Lattner { 3016611103cSGreg Clayton if (m_opaque_sp) 3026611103cSGreg Clayton { 303af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 304af67cecdSGreg Clayton Mutex::Locker api_locker; 305af67cecdSGreg Clayton if (target_sp) 306af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 307af67cecdSGreg Clayton 3086611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 30930fdc8d8SChris Lattner SBCommandReturnObject result; 31030fdc8d8SChris Lattner 31130fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 31230fdc8d8SChris Lattner 31330fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 31430fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 31530fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 31630fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 31730fdc8d8SChris Lattner 3186611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 31930fdc8d8SChris Lattner { 3206611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 321b9556accSGreg Clayton ProcessSP process_sp (process.GetSP()); 322b9556accSGreg Clayton if (process_sp) 32330fdc8d8SChris Lattner { 32430fdc8d8SChris Lattner EventSP event_sp; 3256611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 326b9556accSGreg Clayton while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp)) 32730fdc8d8SChris Lattner { 32830fdc8d8SChris Lattner SBEvent event(event_sp); 32930fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 33030fdc8d8SChris Lattner } 33130fdc8d8SChris Lattner } 33230fdc8d8SChris Lattner } 33330fdc8d8SChris Lattner } 3346611103cSGreg Clayton } 33530fdc8d8SChris Lattner 33630fdc8d8SChris Lattner SBListener 33730fdc8d8SChris Lattner SBDebugger::GetListener () 33830fdc8d8SChris Lattner { 339431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 340ceb6b139SCaroline Tice 3416611103cSGreg Clayton SBListener sb_listener; 3426611103cSGreg Clayton if (m_opaque_sp) 3436611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 344ceb6b139SCaroline Tice 345750cd175SCaroline Tice if (log) 34693aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 347750cd175SCaroline Tice sb_listener.get()); 348750cd175SCaroline Tice 34930fdc8d8SChris Lattner return sb_listener; 35030fdc8d8SChris Lattner } 35130fdc8d8SChris Lattner 35230fdc8d8SChris Lattner void 35330fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 35430fdc8d8SChris Lattner { 355af67cecdSGreg Clayton if (!process.IsValid()) 356af67cecdSGreg Clayton return; 357af67cecdSGreg Clayton 358b9556accSGreg Clayton TargetSP target_sp (process.GetTarget().GetSP()); 359b9556accSGreg Clayton if (!target_sp) 360b9556accSGreg Clayton return; 361b9556accSGreg Clayton 36230fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 36330fdc8d8SChris Lattner char stdio_buffer[1024]; 36430fdc8d8SChris Lattner size_t len; 36530fdc8d8SChris Lattner 366b9556accSGreg Clayton Mutex::Locker api_locker (target_sp->GetAPIMutex()); 367af67cecdSGreg Clayton 368af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 36930fdc8d8SChris Lattner { 370af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 37130fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 37230fdc8d8SChris Lattner if (out != NULL) 37330fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 37430fdc8d8SChris Lattner } 375af67cecdSGreg Clayton 376af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 37730fdc8d8SChris Lattner { 378af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 37930fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 380af67cecdSGreg Clayton if (err != NULL) 381af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 38230fdc8d8SChris Lattner } 383af67cecdSGreg Clayton 384af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 38530fdc8d8SChris Lattner { 38630fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 38730fdc8d8SChris Lattner 38830fdc8d8SChris Lattner if (event_state == eStateInvalid) 38930fdc8d8SChris Lattner return; 39030fdc8d8SChris Lattner 39130fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 39230fdc8d8SChris Lattner if (!is_stopped) 3932976d00aSJim Ingham process.ReportEventState (event, out); 39430fdc8d8SChris Lattner } 39530fdc8d8SChris Lattner } 39630fdc8d8SChris Lattner 397e37d605eSJim Ingham SBSourceManager 39830fdc8d8SChris Lattner SBDebugger::GetSourceManager () 39930fdc8d8SChris Lattner { 400e37d605eSJim Ingham SBSourceManager sb_source_manager (*this); 401e37d605eSJim Ingham return sb_source_manager; 40230fdc8d8SChris Lattner } 40330fdc8d8SChris Lattner 40430fdc8d8SChris Lattner 40530fdc8d8SChris Lattner bool 40630fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 40730fdc8d8SChris Lattner { 40830fdc8d8SChris Lattner if (arch_name && arch_name_len) 40930fdc8d8SChris Lattner { 410431ce678SGreg Clayton ArchSpec default_arch = Target::GetDefaultArchitecture (); 411daccaa9eSCaroline Tice 41230fdc8d8SChris Lattner if (default_arch.IsValid()) 41330fdc8d8SChris Lattner { 414431ce678SGreg Clayton const std::string &triple_str = default_arch.GetTriple().str(); 415431ce678SGreg Clayton if (!triple_str.empty()) 416431ce678SGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str()); 417431ce678SGreg Clayton else 41864195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 41930fdc8d8SChris Lattner return true; 42030fdc8d8SChris Lattner } 42130fdc8d8SChris Lattner } 42230fdc8d8SChris Lattner if (arch_name && arch_name_len) 42330fdc8d8SChris Lattner arch_name[0] = '\0'; 42430fdc8d8SChris Lattner return false; 42530fdc8d8SChris Lattner } 42630fdc8d8SChris Lattner 42730fdc8d8SChris Lattner 42830fdc8d8SChris Lattner bool 42930fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 43030fdc8d8SChris Lattner { 43130fdc8d8SChris Lattner if (arch_name) 43230fdc8d8SChris Lattner { 433eb0103f2SGreg Clayton ArchSpec arch (arch_name, NULL); 43430fdc8d8SChris Lattner if (arch.IsValid()) 43530fdc8d8SChris Lattner { 436431ce678SGreg Clayton Target::SetDefaultArchitecture (arch); 43730fdc8d8SChris Lattner return true; 43830fdc8d8SChris Lattner } 43930fdc8d8SChris Lattner } 44030fdc8d8SChris Lattner return false; 44130fdc8d8SChris Lattner } 44230fdc8d8SChris Lattner 44330fdc8d8SChris Lattner ScriptLanguage 44430fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 44530fdc8d8SChris Lattner { 446af67cecdSGreg Clayton 44730fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 44830fdc8d8SChris Lattner eScriptLanguageDefault, 44930fdc8d8SChris Lattner NULL); 45030fdc8d8SChris Lattner } 45130fdc8d8SChris Lattner 45230fdc8d8SChris Lattner const char * 45330fdc8d8SChris Lattner SBDebugger::GetVersionString () 45430fdc8d8SChris Lattner { 455431ce678SGreg Clayton return GetVersion(); 45630fdc8d8SChris Lattner } 45730fdc8d8SChris Lattner 45830fdc8d8SChris Lattner const char * 459431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state) 46030fdc8d8SChris Lattner { 461c2bbb49aSCaroline Tice return lldb_private::StateAsCString (state); 46230fdc8d8SChris Lattner } 46330fdc8d8SChris Lattner 46430fdc8d8SChris Lattner bool 465431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state) 46630fdc8d8SChris Lattner { 467431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4684838131bSGreg Clayton 469c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsRunningState (state); 4704838131bSGreg Clayton if (log) 4714838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 472431ce678SGreg Clayton StateAsCString (state), result); 4734838131bSGreg Clayton 4744838131bSGreg Clayton return result; 47530fdc8d8SChris Lattner } 47630fdc8d8SChris Lattner 47730fdc8d8SChris Lattner bool 478431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state) 47930fdc8d8SChris Lattner { 480431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 481ceb6b139SCaroline Tice 4822637f825SGreg Clayton const bool result = lldb_private::StateIsStoppedState (state, false); 483ceb6b139SCaroline Tice if (log) 4844838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 485431ce678SGreg Clayton StateAsCString (state), result); 486ceb6b139SCaroline Tice 4874838131bSGreg Clayton return result; 48830fdc8d8SChris Lattner } 48930fdc8d8SChris Lattner 490cac9c5f9SGreg Clayton lldb::SBTarget 491cac9c5f9SGreg Clayton SBDebugger::CreateTarget (const char *filename, 492cac9c5f9SGreg Clayton const char *target_triple, 493cac9c5f9SGreg Clayton const char *platform_name, 494cac9c5f9SGreg Clayton bool add_dependent_modules, 495cac9c5f9SGreg Clayton lldb::SBError& sb_error) 496cac9c5f9SGreg Clayton { 497cac9c5f9SGreg Clayton SBTarget sb_target; 498b9556accSGreg Clayton TargetSP target_sp; 499cac9c5f9SGreg Clayton if (m_opaque_sp) 500cac9c5f9SGreg Clayton { 501cac9c5f9SGreg Clayton sb_error.Clear(); 502cac9c5f9SGreg Clayton FileSpec filename_spec (filename, true); 503cac9c5f9SGreg Clayton OptionGroupPlatform platform_options (false); 504cac9c5f9SGreg Clayton platform_options.SetPlatformName (platform_name); 505cac9c5f9SGreg Clayton 506cac9c5f9SGreg Clayton sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 507cac9c5f9SGreg Clayton filename_spec, 508cac9c5f9SGreg Clayton target_triple, 509cac9c5f9SGreg Clayton add_dependent_modules, 510cac9c5f9SGreg Clayton &platform_options, 511cac9c5f9SGreg Clayton target_sp); 512cac9c5f9SGreg Clayton 513cac9c5f9SGreg Clayton if (sb_error.Success()) 514b9556accSGreg Clayton sb_target.SetSP (target_sp); 515cac9c5f9SGreg Clayton } 516cac9c5f9SGreg Clayton else 517cac9c5f9SGreg Clayton { 518cac9c5f9SGreg Clayton sb_error.SetErrorString("invalid target"); 519cac9c5f9SGreg Clayton } 520cac9c5f9SGreg Clayton 521cac9c5f9SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 522cac9c5f9SGreg Clayton if (log) 523cac9c5f9SGreg Clayton { 524cac9c5f9SGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)", 525cac9c5f9SGreg Clayton m_opaque_sp.get(), 526cac9c5f9SGreg Clayton filename, 527cac9c5f9SGreg Clayton target_triple, 528cac9c5f9SGreg Clayton platform_name, 529cac9c5f9SGreg Clayton add_dependent_modules, 530cac9c5f9SGreg Clayton sb_error.GetCString(), 531b9556accSGreg Clayton target_sp.get()); 532cac9c5f9SGreg Clayton } 533cac9c5f9SGreg Clayton 534cac9c5f9SGreg Clayton return sb_target; 535cac9c5f9SGreg Clayton } 53630fdc8d8SChris Lattner 53730fdc8d8SChris Lattner SBTarget 53830fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 53930fdc8d8SChris Lattner const char *target_triple) 54030fdc8d8SChris Lattner { 541b9556accSGreg Clayton SBTarget sb_target; 542b9556accSGreg Clayton TargetSP target_sp; 5436611103cSGreg Clayton if (m_opaque_sp) 5446611103cSGreg Clayton { 545274060b6SGreg Clayton FileSpec file_spec (filename, true); 54630fdc8d8SChris Lattner TargetSP target_sp; 547cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 548cac9c5f9SGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 549cac9c5f9SGreg Clayton file_spec, 550cac9c5f9SGreg Clayton target_triple, 551cac9c5f9SGreg Clayton add_dependent_modules, 552cac9c5f9SGreg Clayton NULL, 553cac9c5f9SGreg Clayton target_sp)); 554b9556accSGreg Clayton sb_target.SetSP (target_sp); 5556611103cSGreg Clayton } 5564838131bSGreg Clayton 557431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5584838131bSGreg Clayton if (log) 5594838131bSGreg Clayton { 560cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 561b9556accSGreg Clayton m_opaque_sp.get(), filename, target_triple, target_sp.get()); 5624838131bSGreg Clayton } 5634838131bSGreg Clayton 564b9556accSGreg Clayton return sb_target; 56530fdc8d8SChris Lattner } 56630fdc8d8SChris Lattner 56730fdc8d8SChris Lattner SBTarget 56864195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 56930fdc8d8SChris Lattner { 570431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 571ceb6b139SCaroline Tice 572b9556accSGreg Clayton SBTarget sb_target; 573b9556accSGreg Clayton TargetSP target_sp; 5746611103cSGreg Clayton if (m_opaque_sp) 5756611103cSGreg Clayton { 576274060b6SGreg Clayton FileSpec file (filename, true); 57730fdc8d8SChris Lattner Error error; 578cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 57930fdc8d8SChris Lattner 580cac9c5f9SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 581cac9c5f9SGreg Clayton file, 582cac9c5f9SGreg Clayton arch_cstr, 583cac9c5f9SGreg Clayton add_dependent_modules, 584cac9c5f9SGreg Clayton NULL, 585cac9c5f9SGreg Clayton target_sp); 58630fdc8d8SChris Lattner 58730fdc8d8SChris Lattner if (error.Success()) 5886611103cSGreg Clayton { 5892976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 590b9556accSGreg Clayton sb_target.SetSP (target_sp); 5916611103cSGreg Clayton } 5926611103cSGreg Clayton } 593ceb6b139SCaroline Tice 594ceb6b139SCaroline Tice if (log) 595ceb6b139SCaroline Tice { 596cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 597b9556accSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target_sp.get()); 598ceb6b139SCaroline Tice } 599ceb6b139SCaroline Tice 600b9556accSGreg Clayton return sb_target; 60130fdc8d8SChris Lattner } 60230fdc8d8SChris Lattner 60330fdc8d8SChris Lattner SBTarget 60430fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 60530fdc8d8SChris Lattner { 606b9556accSGreg Clayton SBTarget sb_target; 607b9556accSGreg Clayton TargetSP target_sp; 6086611103cSGreg Clayton if (m_opaque_sp) 6096611103cSGreg Clayton { 610274060b6SGreg Clayton FileSpec file (filename, true); 611431ce678SGreg Clayton ArchSpec arch = Target::GetDefaultArchitecture (); 61230fdc8d8SChris Lattner Error error; 613cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 61430fdc8d8SChris Lattner 615cac9c5f9SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 616cac9c5f9SGreg Clayton file, 617cac9c5f9SGreg Clayton arch, 618cac9c5f9SGreg Clayton add_dependent_modules, 619cac9c5f9SGreg Clayton m_opaque_sp->GetPlatformList().GetSelectedPlatform(), 620cac9c5f9SGreg Clayton target_sp); 62130fdc8d8SChris Lattner 6226611103cSGreg Clayton if (error.Success()) 6236611103cSGreg Clayton { 6242976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 625b9556accSGreg Clayton sb_target.SetSP (target_sp); 6266611103cSGreg Clayton } 6276611103cSGreg Clayton } 628431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6294838131bSGreg Clayton if (log) 6304838131bSGreg Clayton { 631cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 632b9556accSGreg Clayton m_opaque_sp.get(), filename, target_sp.get()); 6334838131bSGreg Clayton } 634b9556accSGreg Clayton return sb_target; 63530fdc8d8SChris Lattner } 63630fdc8d8SChris Lattner 6373794ad95SJohnny Chen bool 6383794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target) 6393794ad95SJohnny Chen { 6403794ad95SJohnny Chen bool result = false; 641b9556accSGreg Clayton if (m_opaque_sp) 642b9556accSGreg Clayton { 643b9556accSGreg Clayton TargetSP target_sp(target.GetSP()); 644b9556accSGreg Clayton if (target_sp) 6453794ad95SJohnny Chen { 6463794ad95SJohnny Chen // No need to lock, the target list is thread safe 647b9556accSGreg Clayton result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp); 648b9556accSGreg Clayton target_sp->Destroy(); 64975340622SGreg Clayton target.Clear(); 65075340622SGreg Clayton ModuleList::RemoveOrphanSharedModules(); 6513794ad95SJohnny Chen } 652b9556accSGreg Clayton } 6533794ad95SJohnny Chen 6543794ad95SJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6553794ad95SJohnny Chen if (log) 6563794ad95SJohnny Chen { 6573794ad95SJohnny Chen log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result); 6583794ad95SJohnny Chen } 6593794ad95SJohnny Chen 6603794ad95SJohnny Chen return result; 6613794ad95SJohnny Chen } 66230fdc8d8SChris Lattner SBTarget 66330fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 66430fdc8d8SChris Lattner { 6656611103cSGreg Clayton SBTarget sb_target; 6666611103cSGreg Clayton if (m_opaque_sp) 667af67cecdSGreg Clayton { 668af67cecdSGreg Clayton // No need to lock, the target list is thread safe 669b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 670af67cecdSGreg Clayton } 67130fdc8d8SChris Lattner return sb_target; 67230fdc8d8SChris Lattner } 67330fdc8d8SChris Lattner 67430fdc8d8SChris Lattner SBTarget 67530fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 67630fdc8d8SChris Lattner { 6776611103cSGreg Clayton SBTarget sb_target; 6786611103cSGreg Clayton if (m_opaque_sp) 679af67cecdSGreg Clayton { 680af67cecdSGreg Clayton // No need to lock, the target list is thread safe 681b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 682af67cecdSGreg Clayton } 68330fdc8d8SChris Lattner return sb_target; 68430fdc8d8SChris Lattner } 68530fdc8d8SChris Lattner 68630fdc8d8SChris Lattner SBTarget 68730fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 68830fdc8d8SChris Lattner { 6896611103cSGreg Clayton SBTarget sb_target; 6906611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 6916611103cSGreg Clayton { 692af67cecdSGreg Clayton // No need to lock, the target list is thread safe 693eb0103f2SGreg Clayton ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 694274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 695b9556accSGreg Clayton sb_target.SetSP (target_sp); 6966611103cSGreg Clayton } 6976611103cSGreg Clayton return sb_target; 69830fdc8d8SChris Lattner } 69930fdc8d8SChris Lattner 70030fdc8d8SChris Lattner SBTarget 701431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp) 70230fdc8d8SChris Lattner { 7036611103cSGreg Clayton SBTarget sb_target; 7046611103cSGreg Clayton if (m_opaque_sp) 705af67cecdSGreg Clayton { 706af67cecdSGreg Clayton // No need to lock, the target list is thread safe 707b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 708af67cecdSGreg Clayton } 70930fdc8d8SChris Lattner return sb_target; 71030fdc8d8SChris Lattner } 71130fdc8d8SChris Lattner 71230fdc8d8SChris Lattner 71330fdc8d8SChris Lattner uint32_t 71430fdc8d8SChris Lattner SBDebugger::GetNumTargets () 71530fdc8d8SChris Lattner { 7166611103cSGreg Clayton if (m_opaque_sp) 717af67cecdSGreg Clayton { 718af67cecdSGreg Clayton // No need to lock, the target list is thread safe 7196611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 720af67cecdSGreg Clayton } 7216611103cSGreg Clayton return 0; 7226611103cSGreg Clayton } 72330fdc8d8SChris Lattner 72430fdc8d8SChris Lattner SBTarget 7252976d00aSJim Ingham SBDebugger::GetSelectedTarget () 72630fdc8d8SChris Lattner { 727431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 728ceb6b139SCaroline Tice 7296611103cSGreg Clayton SBTarget sb_target; 730b9556accSGreg Clayton TargetSP target_sp; 7316611103cSGreg Clayton if (m_opaque_sp) 732af67cecdSGreg Clayton { 733af67cecdSGreg Clayton // No need to lock, the target list is thread safe 734b9556accSGreg Clayton target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget (); 735b9556accSGreg Clayton sb_target.SetSP (target_sp); 736af67cecdSGreg Clayton } 737ceb6b139SCaroline Tice 738ceb6b139SCaroline Tice if (log) 739ceb6b139SCaroline Tice { 740ceb6b139SCaroline Tice SBStream sstr; 741431ce678SGreg Clayton sb_target.GetDescription (sstr, eDescriptionLevelBrief); 74293aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 743b9556accSGreg Clayton target_sp.get(), sstr.GetData()); 744ceb6b139SCaroline Tice } 745ceb6b139SCaroline Tice 74630fdc8d8SChris Lattner return sb_target; 74730fdc8d8SChris Lattner } 74830fdc8d8SChris Lattner 74930fdc8d8SChris Lattner void 750e64f0dc7SJim Ingham SBDebugger::SetSelectedTarget (SBTarget &sb_target) 751e64f0dc7SJim Ingham { 752e64f0dc7SJim Ingham LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 753e64f0dc7SJim Ingham 754b9556accSGreg Clayton TargetSP target_sp (sb_target.GetSP()); 755e64f0dc7SJim Ingham if (m_opaque_sp) 756e64f0dc7SJim Ingham { 757b9556accSGreg Clayton m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 758e64f0dc7SJim Ingham } 759e64f0dc7SJim Ingham if (log) 760e64f0dc7SJim Ingham { 761e64f0dc7SJim Ingham SBStream sstr; 762e64f0dc7SJim Ingham sb_target.GetDescription (sstr, eDescriptionLevelBrief); 763e64f0dc7SJim Ingham log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 764b9556accSGreg Clayton target_sp.get(), sstr.GetData()); 765e64f0dc7SJim Ingham } 766e64f0dc7SJim Ingham } 767e64f0dc7SJim Ingham 768e64f0dc7SJim Ingham void 76930fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 77030fdc8d8SChris Lattner { 771431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 772ceb6b139SCaroline Tice 773ceb6b139SCaroline Tice if (log) 774cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(), 775cfd1acedSGreg Clayton baton, (int) data_len, (const char *) data, data_len); 776ceb6b139SCaroline Tice 7776611103cSGreg Clayton if (m_opaque_sp) 7786611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 77930fdc8d8SChris Lattner } 78030fdc8d8SChris Lattner 78130fdc8d8SChris Lattner void 782efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 783efed6131SCaroline Tice { 784efed6131SCaroline Tice if (m_opaque_sp) 785efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 786efed6131SCaroline Tice } 787efed6131SCaroline Tice 788efed6131SCaroline Tice void 789efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 790efed6131SCaroline Tice { 791efed6131SCaroline Tice if (m_opaque_sp) 792efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 793efed6131SCaroline Tice } 7949088b068SCaroline Tice 7959088b068SCaroline Tice bool 7969088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader) 7979088b068SCaroline Tice { 7989088b068SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 7999088b068SCaroline Tice 8009088b068SCaroline Tice if (log) 8019088b068SCaroline Tice log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 8029088b068SCaroline Tice 8039088b068SCaroline Tice if (m_opaque_sp && reader.IsValid()) 8049088b068SCaroline Tice { 8059088b068SCaroline Tice InputReaderSP reader_sp (*reader); 8069088b068SCaroline Tice return m_opaque_sp->InputReaderIsTopReader (reader_sp); 8079088b068SCaroline Tice } 8089088b068SCaroline Tice 8099088b068SCaroline Tice return false; 8109088b068SCaroline Tice } 8119088b068SCaroline Tice 812efed6131SCaroline Tice 813efed6131SCaroline Tice void 81430fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 81530fdc8d8SChris Lattner { 816431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 817ceb6b139SCaroline Tice 818ceb6b139SCaroline Tice if (log) 81993aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 820ceb6b139SCaroline Tice 8216611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 82230fdc8d8SChris Lattner { 823af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 824af67cecdSGreg Clayton Mutex::Locker api_locker; 825af67cecdSGreg Clayton if (target_sp) 826af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 82730fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 8286611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 82930fdc8d8SChris Lattner } 83030fdc8d8SChris Lattner } 8316611103cSGreg Clayton 8326611103cSGreg Clayton void 833969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification) 834969ed3d1SCaroline Tice { 835969ed3d1SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 836969ed3d1SCaroline Tice 837969ed3d1SCaroline Tice if (log) 838969ed3d1SCaroline Tice log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification); 839969ed3d1SCaroline Tice 840969ed3d1SCaroline Tice if (m_opaque_sp) 841969ed3d1SCaroline Tice m_opaque_sp->NotifyTopInputReader (notification); 842969ed3d1SCaroline Tice } 843969ed3d1SCaroline Tice 844969ed3d1SCaroline Tice void 845431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp) 8466611103cSGreg Clayton { 8476611103cSGreg Clayton m_opaque_sp = debugger_sp; 8486611103cSGreg Clayton } 8496611103cSGreg Clayton 8506611103cSGreg Clayton Debugger * 8516611103cSGreg Clayton SBDebugger::get () const 8526611103cSGreg Clayton { 8536611103cSGreg Clayton return m_opaque_sp.get(); 8546611103cSGreg Clayton } 8556611103cSGreg Clayton 8566611103cSGreg Clayton Debugger & 8576611103cSGreg Clayton SBDebugger::ref () const 8586611103cSGreg Clayton { 8596611103cSGreg Clayton assert (m_opaque_sp.get()); 8606611103cSGreg Clayton return *m_opaque_sp; 8616611103cSGreg Clayton } 8626611103cSGreg Clayton 8639a37766eSGreg Clayton const lldb::DebuggerSP & 8649a37766eSGreg Clayton SBDebugger::get_sp () const 8659a37766eSGreg Clayton { 8669a37766eSGreg Clayton return m_opaque_sp; 8679a37766eSGreg Clayton } 8686611103cSGreg Clayton 869ebc1bb27SCaroline Tice SBDebugger 870ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 871ebc1bb27SCaroline Tice { 872af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 873ebc1bb27SCaroline Tice SBDebugger sb_debugger; 874431ce678SGreg Clayton DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 875ebc1bb27SCaroline Tice if (debugger_sp) 876ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 877ebc1bb27SCaroline Tice return sb_debugger; 878ebc1bb27SCaroline Tice } 879e40e4218SJim Ingham 880dd759857SCaroline Tice const char * 881dd759857SCaroline Tice SBDebugger::GetInstanceName() 882dd759857SCaroline Tice { 883dd759857SCaroline Tice if (m_opaque_sp) 884dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 885dd759857SCaroline Tice else 886dd759857SCaroline Tice return NULL; 887dd759857SCaroline Tice } 888dd759857SCaroline Tice 8893df9a8dfSCaroline Tice SBError 890dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 8913df9a8dfSCaroline Tice { 892431ce678SGreg Clayton UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController(); 8933df9a8dfSCaroline Tice 894e0d378b3SGreg Clayton Error err = root_settings_controller->SetVariable (var_name, 895e0d378b3SGreg Clayton value, 896e0d378b3SGreg Clayton eVarSetOperationAssign, 897e0d378b3SGreg Clayton true, 898101c7c20SCaroline Tice debugger_instance_name); 8993df9a8dfSCaroline Tice SBError sb_error; 9003df9a8dfSCaroline Tice sb_error.SetError (err); 9013df9a8dfSCaroline Tice 9023df9a8dfSCaroline Tice return sb_error; 9033df9a8dfSCaroline Tice } 9043df9a8dfSCaroline Tice 905431ce678SGreg Clayton SBStringList 906dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 9073df9a8dfSCaroline Tice { 9083df9a8dfSCaroline Tice SBStringList ret_value; 909e0d378b3SGreg Clayton SettableVariableType var_type; 910431ce678SGreg Clayton Error err; 911101c7c20SCaroline Tice 912431ce678SGreg Clayton UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController(); 9133df9a8dfSCaroline Tice 914daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 915daccaa9eSCaroline Tice 916daccaa9eSCaroline Tice if (err.Success()) 917daccaa9eSCaroline Tice { 918311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 9193df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 920daccaa9eSCaroline Tice } 921daccaa9eSCaroline Tice else 922daccaa9eSCaroline Tice { 923daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 924daccaa9eSCaroline Tice } 925daccaa9eSCaroline Tice 9263df9a8dfSCaroline Tice 9273df9a8dfSCaroline Tice return ret_value; 9283df9a8dfSCaroline Tice } 9293df9a8dfSCaroline Tice 930a7015092SGreg Clayton uint32_t 931a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 932a7015092SGreg Clayton { 933a7015092SGreg Clayton if (m_opaque_sp) 934a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 935a7015092SGreg Clayton return 0; 936a7015092SGreg Clayton } 937a7015092SGreg Clayton 938a7015092SGreg Clayton void 939a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 940a7015092SGreg Clayton { 941a7015092SGreg Clayton if (m_opaque_sp) 942a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 943a7015092SGreg Clayton } 944a7015092SGreg Clayton 945a7015092SGreg Clayton const char * 946a7015092SGreg Clayton SBDebugger::GetPrompt() const 947a7015092SGreg Clayton { 948431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 949ceb6b139SCaroline Tice 950ceb6b139SCaroline Tice if (log) 951cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 952750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 953ceb6b139SCaroline Tice 954a7015092SGreg Clayton if (m_opaque_sp) 955a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 956a7015092SGreg Clayton return 0; 957a7015092SGreg Clayton } 958a7015092SGreg Clayton 959a7015092SGreg Clayton void 960a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 961a7015092SGreg Clayton { 962a7015092SGreg Clayton if (m_opaque_sp) 963a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 964a7015092SGreg Clayton } 965a7015092SGreg Clayton 966a7015092SGreg Clayton 967431ce678SGreg Clayton ScriptLanguage 968a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 969a7015092SGreg Clayton { 970a7015092SGreg Clayton if (m_opaque_sp) 971a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 972a7015092SGreg Clayton return eScriptLanguageNone; 973a7015092SGreg Clayton } 974a7015092SGreg Clayton 975a7015092SGreg Clayton void 976431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang) 977a7015092SGreg Clayton { 978a7015092SGreg Clayton if (m_opaque_sp) 979af67cecdSGreg Clayton { 980a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 981a7015092SGreg Clayton } 982af67cecdSGreg Clayton } 983a7015092SGreg Clayton 984e40e4218SJim Ingham bool 985e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 986e40e4218SJim Ingham { 987e40e4218SJim Ingham if (m_opaque_sp) 988e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 989e40e4218SJim Ingham return false; 990e40e4218SJim Ingham } 991e40e4218SJim Ingham 992e40e4218SJim Ingham bool 993daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 994e40e4218SJim Ingham { 995e40e4218SJim Ingham if (m_opaque_sp) 996daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 997e40e4218SJim Ingham return false; 998e40e4218SJim Ingham } 999e40e4218SJim Ingham 1000dde9cff3SCaroline Tice bool 1001dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 1002dde9cff3SCaroline Tice { 1003da7bc7d0SGreg Clayton Stream &strm = description.ref(); 1004da7bc7d0SGreg Clayton 1005dde9cff3SCaroline Tice if (m_opaque_sp) 1006dde9cff3SCaroline Tice { 1007dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 1008431ce678SGreg Clayton user_id_t id = m_opaque_sp->GetID(); 1009da7bc7d0SGreg Clayton strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id); 1010dde9cff3SCaroline Tice } 1011dde9cff3SCaroline Tice else 1012da7bc7d0SGreg Clayton strm.PutCString ("No value"); 1013dde9cff3SCaroline Tice 1014dde9cff3SCaroline Tice return true; 1015dde9cff3SCaroline Tice } 1016efed6131SCaroline Tice 1017431ce678SGreg Clayton user_id_t 1018efed6131SCaroline Tice SBDebugger::GetID() 1019efed6131SCaroline Tice { 1020efed6131SCaroline Tice if (m_opaque_sp) 1021efed6131SCaroline Tice return m_opaque_sp->GetID(); 1022efed6131SCaroline Tice return LLDB_INVALID_UID; 1023efed6131SCaroline Tice } 10242289fa48SGreg Clayton 10252289fa48SGreg Clayton 10262289fa48SGreg Clayton SBError 10272289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name) 10282289fa48SGreg Clayton { 10292289fa48SGreg Clayton SBError sb_error; 10302289fa48SGreg Clayton if (m_opaque_sp) 10312289fa48SGreg Clayton { 10322289fa48SGreg Clayton PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref())); 10332289fa48SGreg Clayton 10342289fa48SGreg Clayton if (platform_sp) 10352289fa48SGreg Clayton { 10362289fa48SGreg Clayton bool make_selected = true; 10372289fa48SGreg Clayton m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected); 10382289fa48SGreg Clayton } 10392289fa48SGreg Clayton } 10402289fa48SGreg Clayton return sb_error; 10412289fa48SGreg Clayton } 10422289fa48SGreg Clayton 1043fc3f027dSGreg Clayton bool 1044f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot) 1045f3dd93c8SGreg Clayton { 1046f3dd93c8SGreg Clayton if (m_opaque_sp) 1047f3dd93c8SGreg Clayton { 1048f3dd93c8SGreg Clayton PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 1049f3dd93c8SGreg Clayton 1050f3dd93c8SGreg Clayton if (platform_sp) 1051f3dd93c8SGreg Clayton { 1052f3dd93c8SGreg Clayton platform_sp->SetSDKRootDirectory (ConstString (sysroot)); 1053f3dd93c8SGreg Clayton return true; 1054f3dd93c8SGreg Clayton } 1055f3dd93c8SGreg Clayton } 1056f3dd93c8SGreg Clayton return false; 1057f3dd93c8SGreg Clayton } 1058f3dd93c8SGreg Clayton 1059f3dd93c8SGreg Clayton bool 1060fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const 1061fc3f027dSGreg Clayton { 1062fc3f027dSGreg Clayton if (m_opaque_sp) 1063fc3f027dSGreg Clayton return m_opaque_sp->GetCloseInputOnEOF (); 1064fc3f027dSGreg Clayton return false; 1065fc3f027dSGreg Clayton } 1066fc3f027dSGreg Clayton 1067fc3f027dSGreg Clayton void 1068fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b) 1069fc3f027dSGreg Clayton { 1070fc3f027dSGreg Clayton if (m_opaque_sp) 1071fc3f027dSGreg Clayton m_opaque_sp->SetCloseInputOnEOF (b); 1072fc3f027dSGreg Clayton } 1073061858ceSEnrico Granata 1074061858ceSEnrico Granata SBTypeCategory 1075061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name) 1076061858ceSEnrico Granata { 1077061858ceSEnrico Granata if (!category_name || *category_name == 0) 1078061858ceSEnrico Granata return SBTypeCategory(); 1079061858ceSEnrico Granata 1080061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1081061858ceSEnrico Granata 1082061858ceSEnrico Granata if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false)) 1083061858ceSEnrico Granata return SBTypeCategory(category_sp); 1084061858ceSEnrico Granata else 1085061858ceSEnrico Granata return SBTypeCategory(); 1086061858ceSEnrico Granata } 1087061858ceSEnrico Granata 1088061858ceSEnrico Granata SBTypeCategory 1089061858ceSEnrico Granata SBDebugger::CreateCategory (const char* category_name) 1090061858ceSEnrico Granata { 1091061858ceSEnrico Granata if (!category_name || *category_name == 0) 1092061858ceSEnrico Granata return SBTypeCategory(); 1093061858ceSEnrico Granata 1094061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1095061858ceSEnrico Granata 1096061858ceSEnrico Granata if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, true)) 1097061858ceSEnrico Granata return SBTypeCategory(category_sp); 1098061858ceSEnrico Granata else 1099061858ceSEnrico Granata return SBTypeCategory(); 1100061858ceSEnrico Granata } 1101061858ceSEnrico Granata 1102061858ceSEnrico Granata bool 1103061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name) 1104061858ceSEnrico Granata { 1105061858ceSEnrico Granata if (!category_name || *category_name == 0) 1106061858ceSEnrico Granata return false; 1107061858ceSEnrico Granata 1108061858ceSEnrico Granata return DataVisualization::Categories::Delete(ConstString(category_name)); 1109061858ceSEnrico Granata } 1110061858ceSEnrico Granata 1111061858ceSEnrico Granata uint32_t 1112061858ceSEnrico Granata SBDebugger::GetNumCategories() 1113061858ceSEnrico Granata { 1114061858ceSEnrico Granata return DataVisualization::Categories::GetCount(); 1115061858ceSEnrico Granata } 1116061858ceSEnrico Granata 1117061858ceSEnrico Granata SBTypeCategory 1118061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index) 1119061858ceSEnrico Granata { 1120061858ceSEnrico Granata return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)); 1121061858ceSEnrico Granata } 1122061858ceSEnrico Granata 1123061858ceSEnrico Granata SBTypeCategory 1124061858ceSEnrico Granata SBDebugger::GetDefaultCategory() 1125061858ceSEnrico Granata { 1126061858ceSEnrico Granata return GetCategory("default"); 1127061858ceSEnrico Granata } 1128061858ceSEnrico Granata 1129061858ceSEnrico Granata SBTypeFormat 1130061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name) 1131061858ceSEnrico Granata { 1132061858ceSEnrico Granata SBTypeCategory default_category_sb = GetDefaultCategory(); 1133061858ceSEnrico Granata if (default_category_sb.GetEnabled()) 1134061858ceSEnrico Granata return default_category_sb.GetFormatForType(type_name); 1135061858ceSEnrico Granata return SBTypeFormat(); 1136061858ceSEnrico Granata } 1137061858ceSEnrico Granata 1138*cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON 1139061858ceSEnrico Granata SBTypeSummary 1140061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name) 1141061858ceSEnrico Granata { 1142061858ceSEnrico Granata SBTypeSummary summary_chosen; 1143061858ceSEnrico Granata uint32_t num_categories = GetNumCategories(); 1144061858ceSEnrico Granata SBTypeCategory category_sb; 1145061858ceSEnrico Granata uint32_t prio_category = UINT32_MAX; 1146061858ceSEnrico Granata for (uint32_t category_id = 0; 1147061858ceSEnrico Granata category_id < num_categories; 1148061858ceSEnrico Granata category_id++) 1149061858ceSEnrico Granata { 1150061858ceSEnrico Granata category_sb = GetCategoryAtIndex(category_id); 1151061858ceSEnrico Granata if (category_sb.GetEnabled() == false) 1152061858ceSEnrico Granata continue; 1153061858ceSEnrico Granata SBTypeSummary summary_current = category_sb.GetSummaryForType(type_name); 1154061858ceSEnrico Granata if (summary_current.IsValid() && (summary_chosen.IsValid() == false || (prio_category > category_sb.m_opaque_sp->GetEnabledPosition()))) 1155061858ceSEnrico Granata { 1156061858ceSEnrico Granata prio_category = category_sb.m_opaque_sp->GetEnabledPosition(); 1157061858ceSEnrico Granata summary_chosen = summary_current; 1158061858ceSEnrico Granata } 1159061858ceSEnrico Granata } 1160061858ceSEnrico Granata return summary_chosen; 1161061858ceSEnrico Granata } 1162*cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON 1163061858ceSEnrico Granata 1164061858ceSEnrico Granata SBTypeFilter 1165061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name) 1166061858ceSEnrico Granata { 1167061858ceSEnrico Granata SBTypeFilter filter_chosen; 1168061858ceSEnrico Granata uint32_t num_categories = GetNumCategories(); 1169061858ceSEnrico Granata SBTypeCategory category_sb; 1170061858ceSEnrico Granata uint32_t prio_category = UINT32_MAX; 1171061858ceSEnrico Granata for (uint32_t category_id = 0; 1172061858ceSEnrico Granata category_id < num_categories; 1173061858ceSEnrico Granata category_id++) 1174061858ceSEnrico Granata { 1175061858ceSEnrico Granata category_sb = GetCategoryAtIndex(category_id); 1176061858ceSEnrico Granata if (category_sb.GetEnabled() == false) 1177061858ceSEnrico Granata continue; 1178061858ceSEnrico Granata SBTypeFilter filter_current = category_sb.GetFilterForType(type_name); 1179061858ceSEnrico Granata if (filter_current.IsValid() && (filter_chosen.IsValid() == false || (prio_category > category_sb.m_opaque_sp->GetEnabledPosition()))) 1180061858ceSEnrico Granata { 1181061858ceSEnrico Granata prio_category = category_sb.m_opaque_sp->GetEnabledPosition(); 1182061858ceSEnrico Granata filter_chosen = filter_current; 1183061858ceSEnrico Granata } 1184061858ceSEnrico Granata } 1185061858ceSEnrico Granata return filter_chosen; 1186061858ceSEnrico Granata } 1187061858ceSEnrico Granata 1188*cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON 1189061858ceSEnrico Granata SBTypeSynthetic 1190061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name) 1191061858ceSEnrico Granata { 1192061858ceSEnrico Granata SBTypeSynthetic synth_chosen; 1193061858ceSEnrico Granata uint32_t num_categories = GetNumCategories(); 1194061858ceSEnrico Granata SBTypeCategory category_sb; 1195061858ceSEnrico Granata uint32_t prio_category = UINT32_MAX; 1196061858ceSEnrico Granata for (uint32_t category_id = 0; 1197061858ceSEnrico Granata category_id < num_categories; 1198061858ceSEnrico Granata category_id++) 1199061858ceSEnrico Granata { 1200061858ceSEnrico Granata category_sb = GetCategoryAtIndex(category_id); 1201061858ceSEnrico Granata if (category_sb.GetEnabled() == false) 1202061858ceSEnrico Granata continue; 1203061858ceSEnrico Granata SBTypeSynthetic synth_current = category_sb.GetSyntheticForType(type_name); 1204061858ceSEnrico Granata if (synth_current.IsValid() && (synth_chosen.IsValid() == false || (prio_category > category_sb.m_opaque_sp->GetEnabledPosition()))) 1205061858ceSEnrico Granata { 1206061858ceSEnrico Granata prio_category = category_sb.m_opaque_sp->GetEnabledPosition(); 1207061858ceSEnrico Granata synth_chosen = synth_current; 1208061858ceSEnrico Granata } 1209061858ceSEnrico Granata } 1210061858ceSEnrico Granata return synth_chosen; 1211061858ceSEnrico Granata } 1212*cf7e2dc0SJason 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 } 1227