llvm-project/lldb/source/API/SBExecutionContext.cpp
Jim Ingham ffc9f1de34 This adds a "batch mode" to lldb kinda like the gdb batch mode. It will quit the debugger
after all the commands have been executed except if one of the commands was an execution control
command that stopped because of a signal or exception.

Also adds a variant of SBCommandInterpreter::HandleCommand that takes an SBExecutionContext.  That
way you can run an lldb command targeted at a particular target, thread or process w/o having to 
select same before running the command.

Also exposes CommandInterpreter::HandleCommandsFromFile to the SBCommandInterpreter API, since that
seemed generally useful.

llvm-svn: 219654
2014-10-14 01:20:07 +00:00

130 lines
2.8 KiB
C++

//===-- SBExecutionContext.cpp ------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "lldb/API/SBExecutionContext.h"
#include "lldb/API/SBTarget.h"
#include "lldb/API/SBProcess.h"
#include "lldb/API/SBThread.h"
#include "lldb/API/SBFrame.h"
#include "lldb/Target/ExecutionContext.h"
using namespace lldb;
using namespace lldb_private;
SBExecutionContext::SBExecutionContext() :
m_exe_ctx_sp()
{
}
SBExecutionContext::SBExecutionContext (const lldb::SBExecutionContext &rhs) :
m_exe_ctx_sp(rhs.m_exe_ctx_sp)
{
}
SBExecutionContext::SBExecutionContext (lldb::ExecutionContextRefSP exe_ctx_ref_sp) :
m_exe_ctx_sp(exe_ctx_ref_sp)
{
}
SBExecutionContext::SBExecutionContext (const lldb::SBTarget &target) :
m_exe_ctx_sp(new ExecutionContextRef())
{
m_exe_ctx_sp->SetTargetSP(target.GetSP());
}
SBExecutionContext::SBExecutionContext (const lldb::SBProcess &process) :
m_exe_ctx_sp(new ExecutionContextRef())
{
m_exe_ctx_sp->SetProcessSP(process.GetSP());
}
SBExecutionContext::SBExecutionContext (lldb::SBThread thread) :
m_exe_ctx_sp(new ExecutionContextRef())
{
m_exe_ctx_sp->SetThreadPtr(thread.get());
}
SBExecutionContext::SBExecutionContext (const lldb::SBFrame &frame) :
m_exe_ctx_sp(new ExecutionContextRef())
{
m_exe_ctx_sp->SetFrameSP(frame.GetFrameSP());
}
SBExecutionContext::~SBExecutionContext()
{
}
const SBExecutionContext &
SBExecutionContext::operator = (const lldb::SBExecutionContext &rhs)
{
m_exe_ctx_sp = rhs.m_exe_ctx_sp;
return *this;
}
ExecutionContextRef *
SBExecutionContext::get () const
{
return m_exe_ctx_sp.get();
}
SBTarget
SBExecutionContext::GetTarget () const
{
SBTarget sb_target;
if (m_exe_ctx_sp)
{
TargetSP target_sp(m_exe_ctx_sp->GetTargetSP());
if (target_sp)
sb_target.SetSP(target_sp);
}
return sb_target;
}
SBProcess
SBExecutionContext::GetProcess () const
{
SBProcess sb_process;
if (m_exe_ctx_sp)
{
ProcessSP process_sp(m_exe_ctx_sp->GetProcessSP());
if (process_sp)
sb_process.SetSP(process_sp);
}
return sb_process;
}
SBThread
SBExecutionContext::GetThread () const
{
SBThread sb_thread;
if (m_exe_ctx_sp)
{
ThreadSP thread_sp(m_exe_ctx_sp->GetThreadSP());
if (thread_sp)
sb_thread.SetThread(thread_sp);
}
return sb_thread;
}
SBFrame
SBExecutionContext::GetFrame () const
{
SBFrame sb_frame;
if (m_exe_ctx_sp)
{
StackFrameSP frame_sp(m_exe_ctx_sp->GetFrameSP());
if (frame_sp)
sb_frame.SetFrameSP(frame_sp);
}
return sb_frame;
}