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 1093a64300SDaniel Malea #include "lldb/lldb-python.h" 1193a64300SDaniel Malea 12ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h" 1330fdc8d8SChris Lattner 14e0d378b3SGreg Clayton #include "lldb/lldb-private.h" 1530fdc8d8SChris Lattner 16ca93cc1dSEli Friedman #include "lldb/API/SBListener.h" 17ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h" 18ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h" 19ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h" 202289fa48SGreg Clayton #include "lldb/API/SBError.h" 21ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h" 22ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h" 23ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h" 243df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h" 253df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h" 26dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 273df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h" 283df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h" 293df9a8dfSCaroline Tice #include "lldb/API/SBThread.h" 30061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h" 31061858ceSEnrico Granata #include "lldb/API/SBTypeFormat.h" 32061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h" 33061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h" 34061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h" 35061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h" 36061858ceSEnrico Granata 37061858ceSEnrico Granata 386eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h" 396eee5aa0SGreg Clayton #include "lldb/Core/State.h" 405548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h" 416eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h" 426eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h" 43cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h" 446eee5aa0SGreg Clayton #include "lldb/Target/Process.h" 456eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h" 4630fdc8d8SChris Lattner 4730fdc8d8SChris Lattner using namespace lldb; 4830fdc8d8SChris Lattner using namespace lldb_private; 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner void 5130fdc8d8SChris Lattner SBDebugger::Initialize () 5230fdc8d8SChris Lattner { 53*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 54ceb6b139SCaroline Tice 55ceb6b139SCaroline Tice if (log) 56ceb6b139SCaroline Tice log->Printf ("SBDebugger::Initialize ()"); 57ceb6b139SCaroline Tice 58fc36f791SGreg Clayton SBCommandInterpreter::InitializeSWIG (); 59fc36f791SGreg Clayton 6030fdc8d8SChris Lattner Debugger::Initialize(); 6130fdc8d8SChris Lattner } 6230fdc8d8SChris Lattner 6330fdc8d8SChris Lattner void 6430fdc8d8SChris Lattner SBDebugger::Terminate () 6530fdc8d8SChris Lattner { 6630fdc8d8SChris Lattner Debugger::Terminate(); 6730fdc8d8SChris Lattner } 6830fdc8d8SChris Lattner 6948e42549SGreg Clayton void 7048e42549SGreg Clayton SBDebugger::Clear () 7148e42549SGreg Clayton { 72*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 73ceb6b139SCaroline Tice 74ceb6b139SCaroline Tice if (log) 7593aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get()); 763d6086f6SCaroline Tice 773d6086f6SCaroline Tice if (m_opaque_sp) 783d6086f6SCaroline Tice m_opaque_sp->CleanUpInputReaders (); 79ceb6b139SCaroline Tice 8048e42549SGreg Clayton m_opaque_sp.reset(); 8148e42549SGreg Clayton } 8248e42549SGreg Clayton 836611103cSGreg Clayton SBDebugger 846611103cSGreg Clayton SBDebugger::Create() 856611103cSGreg Clayton { 86228063cdSJim Ingham return SBDebugger::Create(false, NULL, NULL); 8706942690SJim Ingham } 8806942690SJim Ingham 8906942690SJim Ingham SBDebugger 9006942690SJim Ingham SBDebugger::Create(bool source_init_files) 9106942690SJim Ingham { 92228063cdSJim Ingham return SBDebugger::Create (source_init_files, NULL, NULL); 93228063cdSJim Ingham } 94228063cdSJim Ingham 95228063cdSJim Ingham SBDebugger 96228063cdSJim Ingham SBDebugger::Create(bool source_init_files, lldb::LogOutputCallback callback, void *baton) 97228063cdSJim Ingham 98228063cdSJim Ingham { 99*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 100ceb6b139SCaroline Tice 1016611103cSGreg Clayton SBDebugger debugger; 102228063cdSJim Ingham debugger.reset(Debugger::CreateInstance(callback, baton)); 103ceb6b139SCaroline Tice 104ceb6b139SCaroline Tice if (log) 105ceb6b139SCaroline Tice { 106ceb6b139SCaroline Tice SBStream sstr; 107ceb6b139SCaroline Tice debugger.GetDescription (sstr); 10893aa84e8SGreg Clayton log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 109ceb6b139SCaroline Tice } 110ceb6b139SCaroline Tice 11106942690SJim Ingham SBCommandInterpreter interp = debugger.GetCommandInterpreter(); 11206942690SJim Ingham if (source_init_files) 11306942690SJim Ingham { 11406942690SJim Ingham interp.get()->SkipLLDBInitFiles(false); 11506942690SJim Ingham interp.get()->SkipAppInitFiles (false); 11606942690SJim Ingham SBCommandReturnObject result; 11706942690SJim Ingham interp.SourceInitFileInHomeDirectory(result); 11806942690SJim Ingham } 11906942690SJim Ingham else 12006942690SJim Ingham { 12106942690SJim Ingham interp.get()->SkipLLDBInitFiles(true); 12206942690SJim Ingham interp.get()->SkipAppInitFiles (true); 12306942690SJim Ingham } 1246611103cSGreg Clayton return debugger; 1256611103cSGreg Clayton } 1266611103cSGreg Clayton 127e02657b1SCaroline Tice void 128e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger) 129e02657b1SCaroline Tice { 130*5160ce5cSGreg Clayton Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 131e02657b1SCaroline Tice 132e02657b1SCaroline Tice if (log) 133e02657b1SCaroline Tice { 134e02657b1SCaroline Tice SBStream sstr; 135e02657b1SCaroline Tice debugger.GetDescription (sstr); 136e02657b1SCaroline Tice log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 137e02657b1SCaroline Tice } 138e02657b1SCaroline Tice 139e02657b1SCaroline Tice Debugger::Destroy (debugger.m_opaque_sp); 140e02657b1SCaroline Tice 141e02657b1SCaroline Tice if (debugger.m_opaque_sp.get() != NULL) 142e02657b1SCaroline Tice debugger.m_opaque_sp.reset(); 143e02657b1SCaroline Tice } 144e02657b1SCaroline Tice 145f9322415SGreg Clayton void 146f9322415SGreg Clayton SBDebugger::MemoryPressureDetected () 147f9322415SGreg Clayton { 1480cd70866SGreg Clayton // Since this function can be call asynchronously, we allow it to be 1490cd70866SGreg Clayton // non-mandatory. We have seen deadlocks with this function when called 1500cd70866SGreg Clayton // so we need to safeguard against this until we can determine what is 1510cd70866SGreg Clayton // causing the deadlocks. 152*5160ce5cSGreg Clayton Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 153aebdf1beSJim Ingham 1540cd70866SGreg Clayton const bool mandatory = false; 155aebdf1beSJim Ingham if (log) 156aebdf1beSJim Ingham { 157aebdf1beSJim Ingham log->Printf ("SBDebugger::MemoryPressureDetected (), mandatory = %d", mandatory); 158aebdf1beSJim Ingham } 159aebdf1beSJim Ingham 1600cd70866SGreg Clayton ModuleList::RemoveOrphanSharedModules(mandatory); 161f9322415SGreg Clayton } 162f9322415SGreg Clayton 1636611103cSGreg Clayton SBDebugger::SBDebugger () : 1646611103cSGreg Clayton m_opaque_sp () 1656611103cSGreg Clayton { 1666611103cSGreg Clayton } 1676611103cSGreg Clayton 168274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) : 169274fd6e9SEnrico Granata m_opaque_sp(debugger_sp) 170274fd6e9SEnrico Granata { 171274fd6e9SEnrico Granata } 172274fd6e9SEnrico Granata 173efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 174efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 175efabb123SGreg Clayton { 176efabb123SGreg Clayton } 177efabb123SGreg Clayton 178efabb123SGreg Clayton SBDebugger & 179efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 180efabb123SGreg Clayton { 181efabb123SGreg Clayton if (this != &rhs) 182efabb123SGreg Clayton { 183efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 184efabb123SGreg Clayton } 185efabb123SGreg Clayton return *this; 186efabb123SGreg Clayton } 187efabb123SGreg Clayton 1886611103cSGreg Clayton SBDebugger::~SBDebugger () 1896611103cSGreg Clayton { 1906611103cSGreg Clayton } 1916611103cSGreg Clayton 1926611103cSGreg Clayton bool 1936611103cSGreg Clayton SBDebugger::IsValid() const 1946611103cSGreg Clayton { 1956611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1966611103cSGreg Clayton } 1976611103cSGreg Clayton 1986611103cSGreg Clayton 19930fdc8d8SChris Lattner void 20030fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 20130fdc8d8SChris Lattner { 2026611103cSGreg Clayton if (m_opaque_sp) 2036611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 20430fdc8d8SChris Lattner } 20530fdc8d8SChris Lattner 206e64f0dc7SJim Ingham bool 207e64f0dc7SJim Ingham SBDebugger::GetAsync () 208e64f0dc7SJim Ingham { 209e64f0dc7SJim Ingham if (m_opaque_sp) 210e64f0dc7SJim Ingham return m_opaque_sp->GetAsyncExecution(); 211e64f0dc7SJim Ingham else 212e64f0dc7SJim Ingham return false; 213e64f0dc7SJim Ingham } 214e64f0dc7SJim Ingham 2156eee5aa0SGreg Clayton void 2166eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 2176eee5aa0SGreg Clayton { 2186eee5aa0SGreg Clayton if (m_opaque_sp) 2196eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 2206eee5aa0SGreg Clayton } 2216eee5aa0SGreg Clayton 22216e0c686SJim Ingham void 22316e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b) 22416e0c686SJim Ingham { 22516e0c686SJim Ingham if (m_opaque_sp) 22616e0c686SJim Ingham m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b); 22716e0c686SJim Ingham } 22816e0c686SJim Ingham 22930fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 23030fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 23130fdc8d8SChris Lattner void 23230fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 23330fdc8d8SChris Lattner { 234*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 235ceb6b139SCaroline Tice 236ceb6b139SCaroline Tice if (log) 237cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (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->SetInputFileHandle (fh, transfer_ownership); 24230fdc8d8SChris Lattner } 24330fdc8d8SChris Lattner 24430fdc8d8SChris Lattner void 24530fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 24630fdc8d8SChris Lattner { 247*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 248ceb6b139SCaroline Tice 249ceb6b139SCaroline Tice 250ceb6b139SCaroline Tice if (log) 251cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (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->SetOutputFileHandle (fh, transfer_ownership); 25630fdc8d8SChris Lattner } 25730fdc8d8SChris Lattner 25830fdc8d8SChris Lattner void 25930fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 26030fdc8d8SChris Lattner { 261*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 262ceb6b139SCaroline Tice 263ceb6b139SCaroline Tice 264ceb6b139SCaroline Tice if (log) 265cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 266cfd1acedSGreg Clayton fh, transfer_ownership); 267ceb6b139SCaroline Tice 2686611103cSGreg Clayton if (m_opaque_sp) 2696611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 27030fdc8d8SChris Lattner } 27130fdc8d8SChris Lattner 27230fdc8d8SChris Lattner FILE * 27330fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 27430fdc8d8SChris Lattner { 2756611103cSGreg Clayton if (m_opaque_sp) 27651b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 2776611103cSGreg Clayton return NULL; 27830fdc8d8SChris Lattner } 27930fdc8d8SChris Lattner 28030fdc8d8SChris Lattner FILE * 28130fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 28230fdc8d8SChris Lattner { 2836611103cSGreg Clayton if (m_opaque_sp) 28451b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2856611103cSGreg Clayton return NULL; 28630fdc8d8SChris Lattner } 28730fdc8d8SChris Lattner 28830fdc8d8SChris Lattner FILE * 28930fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 29030fdc8d8SChris Lattner { 2916611103cSGreg Clayton if (m_opaque_sp) 29251b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2936611103cSGreg Clayton return NULL; 29430fdc8d8SChris Lattner } 29530fdc8d8SChris Lattner 296c5917d9aSJim Ingham void 297c5917d9aSJim Ingham SBDebugger::SaveInputTerminalState() 298c5917d9aSJim Ingham { 299c5917d9aSJim Ingham if (m_opaque_sp) 300c5917d9aSJim Ingham m_opaque_sp->SaveInputTerminalState(); 301c5917d9aSJim Ingham } 302c5917d9aSJim Ingham 303c5917d9aSJim Ingham void 304c5917d9aSJim Ingham SBDebugger::RestoreInputTerminalState() 305c5917d9aSJim Ingham { 306c5917d9aSJim Ingham if (m_opaque_sp) 307c5917d9aSJim Ingham m_opaque_sp->RestoreInputTerminalState(); 308c5917d9aSJim Ingham 309c5917d9aSJim Ingham } 31030fdc8d8SChris Lattner SBCommandInterpreter 31130fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 31230fdc8d8SChris Lattner { 313*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 314ceb6b139SCaroline Tice 3156611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 3166611103cSGreg Clayton if (m_opaque_sp) 3176611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 318ceb6b139SCaroline Tice 319750cd175SCaroline Tice if (log) 32093aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 321750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 322750cd175SCaroline Tice 32330fdc8d8SChris Lattner return sb_interpreter; 32430fdc8d8SChris Lattner } 32530fdc8d8SChris Lattner 32630fdc8d8SChris Lattner void 32730fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 32830fdc8d8SChris Lattner { 3296611103cSGreg Clayton if (m_opaque_sp) 3306611103cSGreg Clayton { 331af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 332af67cecdSGreg Clayton Mutex::Locker api_locker; 333af67cecdSGreg Clayton if (target_sp) 33410ebffa4SJim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 335af67cecdSGreg Clayton 3366611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 33730fdc8d8SChris Lattner SBCommandReturnObject result; 33830fdc8d8SChris Lattner 33930fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 34030fdc8d8SChris Lattner 34130fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 34230fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 34330fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 34430fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 34530fdc8d8SChris Lattner 3466611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 34730fdc8d8SChris Lattner { 3486611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 349b9556accSGreg Clayton ProcessSP process_sp (process.GetSP()); 350b9556accSGreg Clayton if (process_sp) 35130fdc8d8SChris Lattner { 35230fdc8d8SChris Lattner EventSP event_sp; 3536611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 354b9556accSGreg Clayton while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp)) 35530fdc8d8SChris Lattner { 35630fdc8d8SChris Lattner SBEvent event(event_sp); 35730fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 35830fdc8d8SChris Lattner } 35930fdc8d8SChris Lattner } 36030fdc8d8SChris Lattner } 36130fdc8d8SChris Lattner } 3626611103cSGreg Clayton } 36330fdc8d8SChris Lattner 36430fdc8d8SChris Lattner SBListener 36530fdc8d8SChris Lattner SBDebugger::GetListener () 36630fdc8d8SChris Lattner { 367*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 368ceb6b139SCaroline Tice 3696611103cSGreg Clayton SBListener sb_listener; 3706611103cSGreg Clayton if (m_opaque_sp) 3716611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 372ceb6b139SCaroline Tice 373750cd175SCaroline Tice if (log) 37493aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 375750cd175SCaroline Tice sb_listener.get()); 376750cd175SCaroline Tice 37730fdc8d8SChris Lattner return sb_listener; 37830fdc8d8SChris Lattner } 37930fdc8d8SChris Lattner 38030fdc8d8SChris Lattner void 38130fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 38230fdc8d8SChris Lattner { 383af67cecdSGreg Clayton if (!process.IsValid()) 384af67cecdSGreg Clayton return; 385af67cecdSGreg Clayton 386b9556accSGreg Clayton TargetSP target_sp (process.GetTarget().GetSP()); 387b9556accSGreg Clayton if (!target_sp) 388b9556accSGreg Clayton return; 389b9556accSGreg Clayton 39030fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 39130fdc8d8SChris Lattner char stdio_buffer[1024]; 39230fdc8d8SChris Lattner size_t len; 39330fdc8d8SChris Lattner 394b9556accSGreg Clayton Mutex::Locker api_locker (target_sp->GetAPIMutex()); 395af67cecdSGreg Clayton 396af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 39730fdc8d8SChris Lattner { 398af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 39930fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 40030fdc8d8SChris Lattner if (out != NULL) 40130fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 40230fdc8d8SChris Lattner } 403af67cecdSGreg Clayton 404af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 40530fdc8d8SChris Lattner { 406af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 40730fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 408af67cecdSGreg Clayton if (err != NULL) 409af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 41030fdc8d8SChris Lattner } 411af67cecdSGreg Clayton 412af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 41330fdc8d8SChris Lattner { 41430fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 41530fdc8d8SChris Lattner 41630fdc8d8SChris Lattner if (event_state == eStateInvalid) 41730fdc8d8SChris Lattner return; 41830fdc8d8SChris Lattner 41930fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 42030fdc8d8SChris Lattner if (!is_stopped) 4212976d00aSJim Ingham process.ReportEventState (event, out); 42230fdc8d8SChris Lattner } 42330fdc8d8SChris Lattner } 42430fdc8d8SChris Lattner 425e37d605eSJim Ingham SBSourceManager 42630fdc8d8SChris Lattner SBDebugger::GetSourceManager () 42730fdc8d8SChris Lattner { 428e37d605eSJim Ingham SBSourceManager sb_source_manager (*this); 429e37d605eSJim Ingham return sb_source_manager; 43030fdc8d8SChris Lattner } 43130fdc8d8SChris Lattner 43230fdc8d8SChris Lattner 43330fdc8d8SChris Lattner bool 43430fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 43530fdc8d8SChris Lattner { 43630fdc8d8SChris Lattner if (arch_name && arch_name_len) 43730fdc8d8SChris Lattner { 438431ce678SGreg Clayton ArchSpec default_arch = Target::GetDefaultArchitecture (); 439daccaa9eSCaroline Tice 44030fdc8d8SChris Lattner if (default_arch.IsValid()) 44130fdc8d8SChris Lattner { 442431ce678SGreg Clayton const std::string &triple_str = default_arch.GetTriple().str(); 443431ce678SGreg Clayton if (!triple_str.empty()) 444431ce678SGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str()); 445431ce678SGreg Clayton else 44664195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 44730fdc8d8SChris Lattner return true; 44830fdc8d8SChris Lattner } 44930fdc8d8SChris Lattner } 45030fdc8d8SChris Lattner if (arch_name && arch_name_len) 45130fdc8d8SChris Lattner arch_name[0] = '\0'; 45230fdc8d8SChris Lattner return false; 45330fdc8d8SChris Lattner } 45430fdc8d8SChris Lattner 45530fdc8d8SChris Lattner 45630fdc8d8SChris Lattner bool 45730fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 45830fdc8d8SChris Lattner { 45930fdc8d8SChris Lattner if (arch_name) 46030fdc8d8SChris Lattner { 46170512317SGreg Clayton ArchSpec arch (arch_name); 46230fdc8d8SChris Lattner if (arch.IsValid()) 46330fdc8d8SChris Lattner { 464431ce678SGreg Clayton Target::SetDefaultArchitecture (arch); 46530fdc8d8SChris Lattner return true; 46630fdc8d8SChris Lattner } 46730fdc8d8SChris Lattner } 46830fdc8d8SChris Lattner return false; 46930fdc8d8SChris Lattner } 47030fdc8d8SChris Lattner 47130fdc8d8SChris Lattner ScriptLanguage 47230fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 47330fdc8d8SChris Lattner { 474af67cecdSGreg Clayton 47530fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 47630fdc8d8SChris Lattner eScriptLanguageDefault, 47730fdc8d8SChris Lattner NULL); 47830fdc8d8SChris Lattner } 47930fdc8d8SChris Lattner 48030fdc8d8SChris Lattner const char * 48130fdc8d8SChris Lattner SBDebugger::GetVersionString () 48230fdc8d8SChris Lattner { 483431ce678SGreg Clayton return GetVersion(); 48430fdc8d8SChris Lattner } 48530fdc8d8SChris Lattner 48630fdc8d8SChris Lattner const char * 487431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state) 48830fdc8d8SChris Lattner { 489c2bbb49aSCaroline Tice return lldb_private::StateAsCString (state); 49030fdc8d8SChris Lattner } 49130fdc8d8SChris Lattner 49230fdc8d8SChris Lattner bool 493431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state) 49430fdc8d8SChris Lattner { 495*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4964838131bSGreg Clayton 497c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsRunningState (state); 4984838131bSGreg Clayton if (log) 4994838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 500431ce678SGreg Clayton StateAsCString (state), result); 5014838131bSGreg Clayton 5024838131bSGreg Clayton return result; 50330fdc8d8SChris Lattner } 50430fdc8d8SChris Lattner 50530fdc8d8SChris Lattner bool 506431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state) 50730fdc8d8SChris Lattner { 508*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 509ceb6b139SCaroline Tice 5102637f825SGreg Clayton const bool result = lldb_private::StateIsStoppedState (state, false); 511ceb6b139SCaroline Tice if (log) 5124838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 513431ce678SGreg Clayton StateAsCString (state), result); 514ceb6b139SCaroline Tice 5154838131bSGreg Clayton return result; 51630fdc8d8SChris Lattner } 51730fdc8d8SChris Lattner 518cac9c5f9SGreg Clayton lldb::SBTarget 519cac9c5f9SGreg Clayton SBDebugger::CreateTarget (const char *filename, 520cac9c5f9SGreg Clayton const char *target_triple, 521cac9c5f9SGreg Clayton const char *platform_name, 522cac9c5f9SGreg Clayton bool add_dependent_modules, 523cac9c5f9SGreg Clayton lldb::SBError& sb_error) 524cac9c5f9SGreg Clayton { 525cac9c5f9SGreg Clayton SBTarget sb_target; 526b9556accSGreg Clayton TargetSP target_sp; 527cac9c5f9SGreg Clayton if (m_opaque_sp) 528cac9c5f9SGreg Clayton { 529cac9c5f9SGreg Clayton sb_error.Clear(); 530cac9c5f9SGreg Clayton OptionGroupPlatform platform_options (false); 531cac9c5f9SGreg Clayton platform_options.SetPlatformName (platform_name); 532cac9c5f9SGreg Clayton 533cac9c5f9SGreg Clayton sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 534a0ca6601SGreg Clayton filename, 535cac9c5f9SGreg Clayton target_triple, 536cac9c5f9SGreg Clayton add_dependent_modules, 537cac9c5f9SGreg Clayton &platform_options, 538cac9c5f9SGreg Clayton target_sp); 539cac9c5f9SGreg Clayton 540cac9c5f9SGreg Clayton if (sb_error.Success()) 541b9556accSGreg Clayton sb_target.SetSP (target_sp); 542cac9c5f9SGreg Clayton } 543cac9c5f9SGreg Clayton else 544cac9c5f9SGreg Clayton { 545cac9c5f9SGreg Clayton sb_error.SetErrorString("invalid target"); 546cac9c5f9SGreg Clayton } 547cac9c5f9SGreg Clayton 548*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 549cac9c5f9SGreg Clayton if (log) 550cac9c5f9SGreg Clayton { 551cac9c5f9SGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)", 552cac9c5f9SGreg Clayton m_opaque_sp.get(), 553cac9c5f9SGreg Clayton filename, 554cac9c5f9SGreg Clayton target_triple, 555cac9c5f9SGreg Clayton platform_name, 556cac9c5f9SGreg Clayton add_dependent_modules, 557cac9c5f9SGreg Clayton sb_error.GetCString(), 558b9556accSGreg Clayton target_sp.get()); 559cac9c5f9SGreg Clayton } 560cac9c5f9SGreg Clayton 561cac9c5f9SGreg Clayton return sb_target; 562cac9c5f9SGreg Clayton } 56330fdc8d8SChris Lattner 56430fdc8d8SChris Lattner SBTarget 56530fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 56630fdc8d8SChris Lattner const char *target_triple) 56730fdc8d8SChris Lattner { 568b9556accSGreg Clayton SBTarget sb_target; 569b9556accSGreg Clayton TargetSP target_sp; 5706611103cSGreg Clayton if (m_opaque_sp) 5716611103cSGreg Clayton { 572cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 573cac9c5f9SGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 574a0ca6601SGreg Clayton filename, 575cac9c5f9SGreg Clayton target_triple, 576cac9c5f9SGreg Clayton add_dependent_modules, 577cac9c5f9SGreg Clayton NULL, 578cac9c5f9SGreg Clayton target_sp)); 579b9556accSGreg Clayton sb_target.SetSP (target_sp); 5806611103cSGreg Clayton } 5814838131bSGreg Clayton 582*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5834838131bSGreg Clayton if (log) 5844838131bSGreg Clayton { 585cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 586b9556accSGreg Clayton m_opaque_sp.get(), filename, target_triple, target_sp.get()); 5874838131bSGreg Clayton } 5884838131bSGreg Clayton 589b9556accSGreg Clayton return sb_target; 59030fdc8d8SChris Lattner } 59130fdc8d8SChris Lattner 59230fdc8d8SChris Lattner SBTarget 59364195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 59430fdc8d8SChris Lattner { 595*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 596ceb6b139SCaroline Tice 597b9556accSGreg Clayton SBTarget sb_target; 598b9556accSGreg Clayton TargetSP target_sp; 5996611103cSGreg Clayton if (m_opaque_sp) 6006611103cSGreg Clayton { 60130fdc8d8SChris Lattner Error error; 602cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 60330fdc8d8SChris Lattner 604cac9c5f9SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 605a0ca6601SGreg Clayton filename, 606cac9c5f9SGreg Clayton arch_cstr, 607cac9c5f9SGreg Clayton add_dependent_modules, 608cac9c5f9SGreg Clayton NULL, 609cac9c5f9SGreg Clayton target_sp); 61030fdc8d8SChris Lattner 61130fdc8d8SChris Lattner if (error.Success()) 6126611103cSGreg Clayton { 6132976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 614b9556accSGreg Clayton sb_target.SetSP (target_sp); 6156611103cSGreg Clayton } 6166611103cSGreg Clayton } 617ceb6b139SCaroline Tice 618ceb6b139SCaroline Tice if (log) 619ceb6b139SCaroline Tice { 620cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 621b9556accSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target_sp.get()); 622ceb6b139SCaroline Tice } 623ceb6b139SCaroline Tice 624b9556accSGreg Clayton return sb_target; 62530fdc8d8SChris Lattner } 62630fdc8d8SChris Lattner 62730fdc8d8SChris Lattner SBTarget 62830fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 62930fdc8d8SChris Lattner { 630b9556accSGreg Clayton SBTarget sb_target; 631b9556accSGreg Clayton TargetSP target_sp; 6326611103cSGreg Clayton if (m_opaque_sp) 6336611103cSGreg Clayton { 634431ce678SGreg Clayton ArchSpec arch = Target::GetDefaultArchitecture (); 63530fdc8d8SChris Lattner Error error; 636cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 63730fdc8d8SChris Lattner 638b3a40ba8SGreg Clayton PlatformSP platform_sp(m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 639cac9c5f9SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, 640a0ca6601SGreg Clayton filename, 641cac9c5f9SGreg Clayton arch, 642cac9c5f9SGreg Clayton add_dependent_modules, 643b3a40ba8SGreg Clayton platform_sp, 644cac9c5f9SGreg Clayton target_sp); 64530fdc8d8SChris Lattner 6466611103cSGreg Clayton if (error.Success()) 6476611103cSGreg Clayton { 6482976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 649b9556accSGreg Clayton sb_target.SetSP (target_sp); 6506611103cSGreg Clayton } 6516611103cSGreg Clayton } 652*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6534838131bSGreg Clayton if (log) 6544838131bSGreg Clayton { 655cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 656b9556accSGreg Clayton m_opaque_sp.get(), filename, target_sp.get()); 6574838131bSGreg Clayton } 658b9556accSGreg Clayton return sb_target; 65930fdc8d8SChris Lattner } 66030fdc8d8SChris Lattner 6613794ad95SJohnny Chen bool 6623794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target) 6633794ad95SJohnny Chen { 6643794ad95SJohnny Chen bool result = false; 665b9556accSGreg Clayton if (m_opaque_sp) 666b9556accSGreg Clayton { 667b9556accSGreg Clayton TargetSP target_sp(target.GetSP()); 668b9556accSGreg Clayton if (target_sp) 6693794ad95SJohnny Chen { 6703794ad95SJohnny Chen // No need to lock, the target list is thread safe 671b9556accSGreg Clayton result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp); 672b9556accSGreg Clayton target_sp->Destroy(); 67375340622SGreg Clayton target.Clear(); 6740cd70866SGreg Clayton const bool mandatory = true; 6750cd70866SGreg Clayton ModuleList::RemoveOrphanSharedModules(mandatory); 6763794ad95SJohnny Chen } 677b9556accSGreg Clayton } 6783794ad95SJohnny Chen 679*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6803794ad95SJohnny Chen if (log) 6813794ad95SJohnny Chen { 6823794ad95SJohnny Chen log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result); 6833794ad95SJohnny Chen } 6843794ad95SJohnny Chen 6853794ad95SJohnny Chen return result; 6863794ad95SJohnny Chen } 68730fdc8d8SChris Lattner SBTarget 68830fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 68930fdc8d8SChris Lattner { 6906611103cSGreg Clayton SBTarget sb_target; 6916611103cSGreg Clayton if (m_opaque_sp) 692af67cecdSGreg Clayton { 693af67cecdSGreg Clayton // No need to lock, the target list is thread safe 694b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 695af67cecdSGreg Clayton } 69630fdc8d8SChris Lattner return sb_target; 69730fdc8d8SChris Lattner } 69830fdc8d8SChris Lattner 6998499e1a4SJim Ingham uint32_t 7008499e1a4SJim Ingham SBDebugger::GetIndexOfTarget (lldb::SBTarget target) 7018499e1a4SJim Ingham { 7028499e1a4SJim Ingham 7038499e1a4SJim Ingham lldb::TargetSP target_sp = target.GetSP(); 7048499e1a4SJim Ingham if (!target_sp) 7058499e1a4SJim Ingham return UINT32_MAX; 7068499e1a4SJim Ingham 7078499e1a4SJim Ingham if (!m_opaque_sp) 7088499e1a4SJim Ingham return UINT32_MAX; 7098499e1a4SJim Ingham 7108499e1a4SJim Ingham return m_opaque_sp->GetTargetList().GetIndexOfTarget (target.GetSP()); 7118499e1a4SJim Ingham } 7128499e1a4SJim Ingham 71330fdc8d8SChris Lattner SBTarget 71430fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 71530fdc8d8SChris Lattner { 7166611103cSGreg Clayton SBTarget sb_target; 7176611103cSGreg Clayton if (m_opaque_sp) 718af67cecdSGreg Clayton { 719af67cecdSGreg Clayton // No need to lock, the target list is thread safe 720b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 721af67cecdSGreg Clayton } 72230fdc8d8SChris Lattner return sb_target; 72330fdc8d8SChris Lattner } 72430fdc8d8SChris Lattner 72530fdc8d8SChris Lattner SBTarget 72630fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 72730fdc8d8SChris Lattner { 7286611103cSGreg Clayton SBTarget sb_target; 7296611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 7306611103cSGreg Clayton { 731af67cecdSGreg Clayton // No need to lock, the target list is thread safe 732eb0103f2SGreg Clayton ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 733274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 734b9556accSGreg Clayton sb_target.SetSP (target_sp); 7356611103cSGreg Clayton } 7366611103cSGreg Clayton return sb_target; 73730fdc8d8SChris Lattner } 73830fdc8d8SChris Lattner 73930fdc8d8SChris Lattner SBTarget 740431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp) 74130fdc8d8SChris Lattner { 7426611103cSGreg Clayton SBTarget sb_target; 7436611103cSGreg Clayton if (m_opaque_sp) 744af67cecdSGreg Clayton { 745af67cecdSGreg Clayton // No need to lock, the target list is thread safe 746b9556accSGreg Clayton sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 747af67cecdSGreg Clayton } 74830fdc8d8SChris Lattner return sb_target; 74930fdc8d8SChris Lattner } 75030fdc8d8SChris Lattner 75130fdc8d8SChris Lattner 75230fdc8d8SChris Lattner uint32_t 75330fdc8d8SChris Lattner SBDebugger::GetNumTargets () 75430fdc8d8SChris Lattner { 7556611103cSGreg Clayton if (m_opaque_sp) 756af67cecdSGreg Clayton { 757af67cecdSGreg Clayton // No need to lock, the target list is thread safe 7586611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 759af67cecdSGreg Clayton } 7606611103cSGreg Clayton return 0; 7616611103cSGreg Clayton } 76230fdc8d8SChris Lattner 76330fdc8d8SChris Lattner SBTarget 7642976d00aSJim Ingham SBDebugger::GetSelectedTarget () 76530fdc8d8SChris Lattner { 766*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 767ceb6b139SCaroline Tice 7686611103cSGreg Clayton SBTarget sb_target; 769b9556accSGreg Clayton TargetSP target_sp; 7706611103cSGreg Clayton if (m_opaque_sp) 771af67cecdSGreg Clayton { 772af67cecdSGreg Clayton // No need to lock, the target list is thread safe 773b9556accSGreg Clayton target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget (); 774b9556accSGreg Clayton sb_target.SetSP (target_sp); 775af67cecdSGreg Clayton } 776ceb6b139SCaroline Tice 777ceb6b139SCaroline Tice if (log) 778ceb6b139SCaroline Tice { 779ceb6b139SCaroline Tice SBStream sstr; 780431ce678SGreg Clayton sb_target.GetDescription (sstr, eDescriptionLevelBrief); 78193aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 782b9556accSGreg Clayton target_sp.get(), sstr.GetData()); 783ceb6b139SCaroline Tice } 784ceb6b139SCaroline Tice 78530fdc8d8SChris Lattner return sb_target; 78630fdc8d8SChris Lattner } 78730fdc8d8SChris Lattner 78830fdc8d8SChris Lattner void 789e64f0dc7SJim Ingham SBDebugger::SetSelectedTarget (SBTarget &sb_target) 790e64f0dc7SJim Ingham { 791*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 792e64f0dc7SJim Ingham 793b9556accSGreg Clayton TargetSP target_sp (sb_target.GetSP()); 794e64f0dc7SJim Ingham if (m_opaque_sp) 795e64f0dc7SJim Ingham { 796b9556accSGreg Clayton m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 797e64f0dc7SJim Ingham } 798e64f0dc7SJim Ingham if (log) 799e64f0dc7SJim Ingham { 800e64f0dc7SJim Ingham SBStream sstr; 801e64f0dc7SJim Ingham sb_target.GetDescription (sstr, eDescriptionLevelBrief); 802e64f0dc7SJim Ingham log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 803b9556accSGreg Clayton target_sp.get(), sstr.GetData()); 804e64f0dc7SJim Ingham } 805e64f0dc7SJim Ingham } 806e64f0dc7SJim Ingham 807e64f0dc7SJim Ingham void 808c30a73adSEnrico Granata SBDebugger::DispatchInput (void* baton, const void *data, size_t data_len) 8096b09d423SEnrico Granata { 8106b09d423SEnrico Granata DispatchInput (data,data_len); 8116b09d423SEnrico Granata } 8126b09d423SEnrico Granata 8136b09d423SEnrico Granata void 814c3019991SFilipe Cabecinhas SBDebugger::DispatchInput (const void *data, size_t data_len) 81530fdc8d8SChris Lattner { 816*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 817ceb6b139SCaroline Tice 818ceb6b139SCaroline Tice if (log) 819d01b2953SDaniel Malea log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\", size_t=%" PRIu64 ")", 82043e0af06SGreg Clayton m_opaque_sp.get(), 82143e0af06SGreg Clayton (int) data_len, 82243e0af06SGreg Clayton (const char *) data, 82343e0af06SGreg Clayton (uint64_t)data_len); 824ceb6b139SCaroline Tice 8256611103cSGreg Clayton if (m_opaque_sp) 8266611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 82730fdc8d8SChris Lattner } 82830fdc8d8SChris Lattner 82930fdc8d8SChris Lattner void 830efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 831efed6131SCaroline Tice { 832efed6131SCaroline Tice if (m_opaque_sp) 833efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 834efed6131SCaroline Tice } 835efed6131SCaroline Tice 836efed6131SCaroline Tice void 837efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 838efed6131SCaroline Tice { 839efed6131SCaroline Tice if (m_opaque_sp) 840efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 841efed6131SCaroline Tice } 8429088b068SCaroline Tice 8439088b068SCaroline Tice bool 8449088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader) 8459088b068SCaroline Tice { 846*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 8479088b068SCaroline Tice 8489088b068SCaroline Tice if (log) 8499088b068SCaroline Tice log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 8509088b068SCaroline Tice 8519088b068SCaroline Tice if (m_opaque_sp && reader.IsValid()) 8529088b068SCaroline Tice { 8539088b068SCaroline Tice InputReaderSP reader_sp (*reader); 8549088b068SCaroline Tice return m_opaque_sp->InputReaderIsTopReader (reader_sp); 8559088b068SCaroline Tice } 8569088b068SCaroline Tice 8579088b068SCaroline Tice return false; 8589088b068SCaroline Tice } 8599088b068SCaroline Tice 860efed6131SCaroline Tice 861efed6131SCaroline Tice void 86230fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 86330fdc8d8SChris Lattner { 864*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 865ceb6b139SCaroline Tice 866ceb6b139SCaroline Tice if (log) 86793aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 868ceb6b139SCaroline Tice 8696611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 87030fdc8d8SChris Lattner { 871af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 872af67cecdSGreg Clayton Mutex::Locker api_locker; 873af67cecdSGreg Clayton if (target_sp) 87410ebffa4SJim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 87530fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 8766611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 87730fdc8d8SChris Lattner } 87830fdc8d8SChris Lattner } 8796611103cSGreg Clayton 8806611103cSGreg Clayton void 881969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification) 882969ed3d1SCaroline Tice { 883*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 884969ed3d1SCaroline Tice 885969ed3d1SCaroline Tice if (log) 886969ed3d1SCaroline Tice log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification); 887969ed3d1SCaroline Tice 888969ed3d1SCaroline Tice if (m_opaque_sp) 889969ed3d1SCaroline Tice m_opaque_sp->NotifyTopInputReader (notification); 890969ed3d1SCaroline Tice } 891969ed3d1SCaroline Tice 892969ed3d1SCaroline Tice void 893431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp) 8946611103cSGreg Clayton { 8956611103cSGreg Clayton m_opaque_sp = debugger_sp; 8966611103cSGreg Clayton } 8976611103cSGreg Clayton 8986611103cSGreg Clayton Debugger * 8996611103cSGreg Clayton SBDebugger::get () const 9006611103cSGreg Clayton { 9016611103cSGreg Clayton return m_opaque_sp.get(); 9026611103cSGreg Clayton } 9036611103cSGreg Clayton 9046611103cSGreg Clayton Debugger & 9056611103cSGreg Clayton SBDebugger::ref () const 9066611103cSGreg Clayton { 9076611103cSGreg Clayton assert (m_opaque_sp.get()); 9086611103cSGreg Clayton return *m_opaque_sp; 9096611103cSGreg Clayton } 9106611103cSGreg Clayton 9119a37766eSGreg Clayton const lldb::DebuggerSP & 9129a37766eSGreg Clayton SBDebugger::get_sp () const 9139a37766eSGreg Clayton { 9149a37766eSGreg Clayton return m_opaque_sp; 9159a37766eSGreg Clayton } 9166611103cSGreg Clayton 917ebc1bb27SCaroline Tice SBDebugger 918ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 919ebc1bb27SCaroline Tice { 920af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 921ebc1bb27SCaroline Tice SBDebugger sb_debugger; 922431ce678SGreg Clayton DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 923ebc1bb27SCaroline Tice if (debugger_sp) 924ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 925ebc1bb27SCaroline Tice return sb_debugger; 926ebc1bb27SCaroline Tice } 927e40e4218SJim Ingham 928dd759857SCaroline Tice const char * 929dd759857SCaroline Tice SBDebugger::GetInstanceName() 930dd759857SCaroline Tice { 9316920b52bSGreg Clayton if (m_opaque_sp) 9326920b52bSGreg Clayton return m_opaque_sp->GetInstanceName().AsCString(); 9336920b52bSGreg Clayton else 934dd759857SCaroline Tice return NULL; 935dd759857SCaroline Tice } 936dd759857SCaroline Tice 9373df9a8dfSCaroline Tice SBError 938dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 9393df9a8dfSCaroline Tice { 9406920b52bSGreg Clayton SBError sb_error; 9416920b52bSGreg Clayton DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name))); 9426920b52bSGreg Clayton Error error; 9436920b52bSGreg Clayton if (debugger_sp) 9446920b52bSGreg Clayton { 9456920b52bSGreg Clayton ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext()); 9466920b52bSGreg Clayton error = debugger_sp->SetPropertyValue (&exe_ctx, 9476920b52bSGreg Clayton eVarSetOperationAssign, 9486920b52bSGreg Clayton var_name, 9496920b52bSGreg Clayton value); 9506920b52bSGreg Clayton } 9516920b52bSGreg Clayton else 9526920b52bSGreg Clayton { 9536920b52bSGreg Clayton error.SetErrorStringWithFormat ("invalid debugger instance name '%s'", debugger_instance_name); 9546920b52bSGreg Clayton } 9556920b52bSGreg Clayton if (error.Fail()) 9566920b52bSGreg Clayton sb_error.SetError(error); 9576920b52bSGreg Clayton return sb_error; 9583df9a8dfSCaroline Tice } 9593df9a8dfSCaroline Tice 960431ce678SGreg Clayton SBStringList 961dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 9623df9a8dfSCaroline Tice { 9633df9a8dfSCaroline Tice SBStringList ret_value; 9646920b52bSGreg Clayton DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name))); 9656920b52bSGreg Clayton Error error; 9666920b52bSGreg Clayton if (debugger_sp) 9676920b52bSGreg Clayton { 9686920b52bSGreg Clayton ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext()); 9696920b52bSGreg Clayton lldb::OptionValueSP value_sp (debugger_sp->GetPropertyValue (&exe_ctx, 9706920b52bSGreg Clayton var_name, 9716920b52bSGreg Clayton false, 9726920b52bSGreg Clayton error)); 9736920b52bSGreg Clayton if (value_sp) 9746920b52bSGreg Clayton { 9756920b52bSGreg Clayton StreamString value_strm; 9766920b52bSGreg Clayton value_sp->DumpValue (&exe_ctx, value_strm, OptionValue::eDumpOptionValue); 9776920b52bSGreg Clayton const std::string &value_str = value_strm.GetString(); 9786920b52bSGreg Clayton if (!value_str.empty()) 9796920b52bSGreg Clayton { 9806920b52bSGreg Clayton StringList string_list; 9816920b52bSGreg Clayton string_list.SplitIntoLines(value_str.c_str(), value_str.size()); 9826920b52bSGreg Clayton return SBStringList(&string_list); 9836920b52bSGreg Clayton } 9846920b52bSGreg Clayton } 9856920b52bSGreg Clayton } 9866920b52bSGreg Clayton return SBStringList(); 9873df9a8dfSCaroline Tice } 9883df9a8dfSCaroline Tice 989a7015092SGreg Clayton uint32_t 990a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 991a7015092SGreg Clayton { 992a7015092SGreg Clayton if (m_opaque_sp) 993a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 994a7015092SGreg Clayton return 0; 995a7015092SGreg Clayton } 996a7015092SGreg Clayton 997a7015092SGreg Clayton void 998a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 999a7015092SGreg Clayton { 1000a7015092SGreg Clayton if (m_opaque_sp) 1001a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 1002a7015092SGreg Clayton } 1003a7015092SGreg Clayton 1004a7015092SGreg Clayton const char * 1005a7015092SGreg Clayton SBDebugger::GetPrompt() const 1006a7015092SGreg Clayton { 1007*5160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1008ceb6b139SCaroline Tice 1009ceb6b139SCaroline Tice if (log) 1010cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 1011750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 1012ceb6b139SCaroline Tice 1013a7015092SGreg Clayton if (m_opaque_sp) 1014a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 1015a7015092SGreg Clayton return 0; 1016a7015092SGreg Clayton } 1017a7015092SGreg Clayton 1018a7015092SGreg Clayton void 1019a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 1020a7015092SGreg Clayton { 1021a7015092SGreg Clayton if (m_opaque_sp) 1022a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 1023a7015092SGreg Clayton } 1024a7015092SGreg Clayton 1025a7015092SGreg Clayton 1026431ce678SGreg Clayton ScriptLanguage 1027a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 1028a7015092SGreg Clayton { 1029a7015092SGreg Clayton if (m_opaque_sp) 1030a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 1031a7015092SGreg Clayton return eScriptLanguageNone; 1032a7015092SGreg Clayton } 1033a7015092SGreg Clayton 1034a7015092SGreg Clayton void 1035431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang) 1036a7015092SGreg Clayton { 1037a7015092SGreg Clayton if (m_opaque_sp) 1038af67cecdSGreg Clayton { 1039a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 1040a7015092SGreg Clayton } 1041af67cecdSGreg Clayton } 1042a7015092SGreg Clayton 1043e40e4218SJim Ingham bool 1044e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 1045e40e4218SJim Ingham { 1046e40e4218SJim Ingham if (m_opaque_sp) 1047e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 1048e40e4218SJim Ingham return false; 1049e40e4218SJim Ingham } 1050e40e4218SJim Ingham 1051e40e4218SJim Ingham bool 1052daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 1053e40e4218SJim Ingham { 1054e40e4218SJim Ingham if (m_opaque_sp) 1055daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 1056e40e4218SJim Ingham return false; 1057e40e4218SJim Ingham } 1058e40e4218SJim Ingham 1059dde9cff3SCaroline Tice bool 1060dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 1061dde9cff3SCaroline Tice { 1062da7bc7d0SGreg Clayton Stream &strm = description.ref(); 1063da7bc7d0SGreg Clayton 1064dde9cff3SCaroline Tice if (m_opaque_sp) 1065dde9cff3SCaroline Tice { 1066dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 1067431ce678SGreg Clayton user_id_t id = m_opaque_sp->GetID(); 1068d01b2953SDaniel Malea strm.Printf ("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id); 1069dde9cff3SCaroline Tice } 1070dde9cff3SCaroline Tice else 1071da7bc7d0SGreg Clayton strm.PutCString ("No value"); 1072dde9cff3SCaroline Tice 1073dde9cff3SCaroline Tice return true; 1074dde9cff3SCaroline Tice } 1075efed6131SCaroline Tice 1076431ce678SGreg Clayton user_id_t 1077efed6131SCaroline Tice SBDebugger::GetID() 1078efed6131SCaroline Tice { 1079efed6131SCaroline Tice if (m_opaque_sp) 1080efed6131SCaroline Tice return m_opaque_sp->GetID(); 1081efed6131SCaroline Tice return LLDB_INVALID_UID; 1082efed6131SCaroline Tice } 10832289fa48SGreg Clayton 10842289fa48SGreg Clayton 10852289fa48SGreg Clayton SBError 10862289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name) 10872289fa48SGreg Clayton { 10882289fa48SGreg Clayton SBError sb_error; 10892289fa48SGreg Clayton if (m_opaque_sp) 10902289fa48SGreg Clayton { 10912289fa48SGreg Clayton PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref())); 10922289fa48SGreg Clayton 10932289fa48SGreg Clayton if (platform_sp) 10942289fa48SGreg Clayton { 10952289fa48SGreg Clayton bool make_selected = true; 10962289fa48SGreg Clayton m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected); 10972289fa48SGreg Clayton } 10982289fa48SGreg Clayton } 10992289fa48SGreg Clayton return sb_error; 11002289fa48SGreg Clayton } 11012289fa48SGreg Clayton 1102fc3f027dSGreg Clayton bool 1103f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot) 1104f3dd93c8SGreg Clayton { 1105f3dd93c8SGreg Clayton if (m_opaque_sp) 1106f3dd93c8SGreg Clayton { 1107f3dd93c8SGreg Clayton PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 1108f3dd93c8SGreg Clayton 1109f3dd93c8SGreg Clayton if (platform_sp) 1110f3dd93c8SGreg Clayton { 1111f3dd93c8SGreg Clayton platform_sp->SetSDKRootDirectory (ConstString (sysroot)); 1112f3dd93c8SGreg Clayton return true; 1113f3dd93c8SGreg Clayton } 1114f3dd93c8SGreg Clayton } 1115f3dd93c8SGreg Clayton return false; 1116f3dd93c8SGreg Clayton } 1117f3dd93c8SGreg Clayton 1118f3dd93c8SGreg Clayton bool 1119fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const 1120fc3f027dSGreg Clayton { 1121fc3f027dSGreg Clayton if (m_opaque_sp) 1122fc3f027dSGreg Clayton return m_opaque_sp->GetCloseInputOnEOF (); 1123fc3f027dSGreg Clayton return false; 1124fc3f027dSGreg Clayton } 1125fc3f027dSGreg Clayton 1126fc3f027dSGreg Clayton void 1127fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b) 1128fc3f027dSGreg Clayton { 1129fc3f027dSGreg Clayton if (m_opaque_sp) 1130fc3f027dSGreg Clayton m_opaque_sp->SetCloseInputOnEOF (b); 1131fc3f027dSGreg Clayton } 1132061858ceSEnrico Granata 1133061858ceSEnrico Granata SBTypeCategory 1134061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name) 1135061858ceSEnrico Granata { 1136061858ceSEnrico Granata if (!category_name || *category_name == 0) 1137061858ceSEnrico Granata return SBTypeCategory(); 1138061858ceSEnrico Granata 1139061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1140061858ceSEnrico Granata 1141061858ceSEnrico Granata if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false)) 1142061858ceSEnrico Granata return SBTypeCategory(category_sp); 1143061858ceSEnrico Granata else 1144061858ceSEnrico Granata return SBTypeCategory(); 1145061858ceSEnrico Granata } 1146061858ceSEnrico Granata 1147061858ceSEnrico Granata SBTypeCategory 1148061858ceSEnrico Granata SBDebugger::CreateCategory (const char* category_name) 1149061858ceSEnrico Granata { 1150061858ceSEnrico Granata if (!category_name || *category_name == 0) 1151061858ceSEnrico Granata return SBTypeCategory(); 1152061858ceSEnrico Granata 1153061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1154061858ceSEnrico Granata 1155061858ceSEnrico Granata if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, true)) 1156061858ceSEnrico Granata return SBTypeCategory(category_sp); 1157061858ceSEnrico Granata else 1158061858ceSEnrico Granata return SBTypeCategory(); 1159061858ceSEnrico Granata } 1160061858ceSEnrico Granata 1161061858ceSEnrico Granata bool 1162061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name) 1163061858ceSEnrico Granata { 1164061858ceSEnrico Granata if (!category_name || *category_name == 0) 1165061858ceSEnrico Granata return false; 1166061858ceSEnrico Granata 1167061858ceSEnrico Granata return DataVisualization::Categories::Delete(ConstString(category_name)); 1168061858ceSEnrico Granata } 1169061858ceSEnrico Granata 1170061858ceSEnrico Granata uint32_t 1171061858ceSEnrico Granata SBDebugger::GetNumCategories() 1172061858ceSEnrico Granata { 1173061858ceSEnrico Granata return DataVisualization::Categories::GetCount(); 1174061858ceSEnrico Granata } 1175061858ceSEnrico Granata 1176061858ceSEnrico Granata SBTypeCategory 1177061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index) 1178061858ceSEnrico Granata { 1179061858ceSEnrico Granata return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)); 1180061858ceSEnrico Granata } 1181061858ceSEnrico Granata 1182061858ceSEnrico Granata SBTypeCategory 1183061858ceSEnrico Granata SBDebugger::GetDefaultCategory() 1184061858ceSEnrico Granata { 1185061858ceSEnrico Granata return GetCategory("default"); 1186061858ceSEnrico Granata } 1187061858ceSEnrico Granata 1188061858ceSEnrico Granata SBTypeFormat 1189061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name) 1190061858ceSEnrico Granata { 1191061858ceSEnrico Granata SBTypeCategory default_category_sb = GetDefaultCategory(); 1192061858ceSEnrico Granata if (default_category_sb.GetEnabled()) 1193061858ceSEnrico Granata return default_category_sb.GetFormatForType(type_name); 1194061858ceSEnrico Granata return SBTypeFormat(); 1195061858ceSEnrico Granata } 1196061858ceSEnrico Granata 1197cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON 1198061858ceSEnrico Granata SBTypeSummary 1199061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name) 1200061858ceSEnrico Granata { 1201a777dc2aSEnrico Granata if (type_name.IsValid() == false) 1202a777dc2aSEnrico Granata return SBTypeSummary(); 1203a777dc2aSEnrico Granata return SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP())); 1204061858ceSEnrico Granata } 1205cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON 1206061858ceSEnrico Granata 1207061858ceSEnrico Granata SBTypeFilter 1208061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name) 1209061858ceSEnrico Granata { 1210a777dc2aSEnrico Granata if (type_name.IsValid() == false) 1211a777dc2aSEnrico Granata return SBTypeFilter(); 1212a777dc2aSEnrico Granata return SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP())); 1213061858ceSEnrico Granata } 1214061858ceSEnrico Granata 1215cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON 1216061858ceSEnrico Granata SBTypeSynthetic 1217061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name) 1218061858ceSEnrico Granata { 1219a777dc2aSEnrico Granata if (type_name.IsValid() == false) 1220a777dc2aSEnrico Granata return SBTypeSynthetic(); 1221a777dc2aSEnrico Granata return SBTypeSynthetic(DataVisualization::GetSyntheticForType(type_name.GetSP())); 1222061858ceSEnrico Granata } 1223cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON 1224061858ceSEnrico Granata 1225228063cdSJim Ingham bool 1226228063cdSJim Ingham SBDebugger::EnableLog (const char *channel, const char **categories) 1227228063cdSJim Ingham { 1228228063cdSJim Ingham if (m_opaque_sp) 1229228063cdSJim Ingham { 1230228063cdSJim Ingham uint32_t log_options = LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME; 1231228063cdSJim Ingham StreamString errors; 1232228063cdSJim Ingham return m_opaque_sp->EnableLog (channel, categories, NULL, log_options, errors); 1233228063cdSJim Ingham 1234228063cdSJim Ingham } 1235228063cdSJim Ingham else 1236228063cdSJim Ingham return false; 1237228063cdSJim Ingham } 12384f02b22dSJim Ingham 12394f02b22dSJim Ingham void 12404f02b22dSJim Ingham SBDebugger::SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton) 12414f02b22dSJim Ingham { 12424f02b22dSJim Ingham if (m_opaque_sp) 12434f02b22dSJim Ingham { 12444f02b22dSJim Ingham return m_opaque_sp->SetLoggingCallback (log_callback, baton); 12454f02b22dSJim Ingham } 12464f02b22dSJim Ingham } 12474f02b22dSJim Ingham 12484f02b22dSJim Ingham 1249