Expose the error contained within an SBValue.

Move anything that creates a new process into SBTarget. Marked some functions
as deprecated. I will remove them after our new API changes make it through
a build cycle.

llvm-svn: 115854
This commit is contained in:
Greg Clayton 2010-10-06 22:10:17 +00:00
parent 24ab1ce8c2
commit 524e60b4e4
6 changed files with 143 additions and 2 deletions

View File

@ -75,6 +75,8 @@ protected:
friend class SBHostOS; friend class SBHostOS;
friend class SBInputReader; friend class SBInputReader;
friend class SBProcess; friend class SBProcess;
friend class SBTarget;
friend class SBValue;
#ifndef SWIG #ifndef SWIG

View File

@ -112,9 +112,11 @@ public:
lldb::pid_t lldb::pid_t
AttachByPID (lldb::pid_t pid); // DEPRECATED: will be removed in a few builds in favor of SBError AttachByPID(pid_t) AttachByPID (lldb::pid_t pid); // DEPRECATED: will be removed in a few builds in favor of SBError AttachByPID(pid_t)
// DEPRECATED: relocated to "SBProcess SBTarget::AttachToProcess (lldb::pid_t pid, SBError& error)"
SBError SBError
Attach (lldb::pid_t pid); Attach (lldb::pid_t pid);
// DEPRECATED: relocated to "SBProcess SBTarget::AttachToProcess (const char *name, bool wait_for_launch, SBError& error)"
SBError SBError
AttachByName (const char *name, bool wait_for_launch); AttachByName (const char *name, bool wait_for_launch);

View File

@ -55,6 +55,8 @@ public:
lldb::SBProcess lldb::SBProcess
GetProcess (); GetProcess ();
// DEPRECATED in favor of the function below that contains an SBError as the
// last parameter.
lldb::SBProcess lldb::SBProcess
LaunchProcess (char const **argv, LaunchProcess (char const **argv,
char const **envp, char const **envp,
@ -62,6 +64,23 @@ public:
uint32_t launch_flags, // See lldb::LaunchFlags uint32_t launch_flags, // See lldb::LaunchFlags
bool stop_at_entry); bool stop_at_entry);
lldb::SBProcess
LaunchProcess (char const **argv,
char const **envp,
const char *tty,
uint32_t launch_flags, // See lldb::LaunchFlags
bool stop_at_entry,
SBError& error);
lldb::SBProcess
AttachToProcess (lldb::pid_t pid, // The process ID to attach to
SBError& error); // An error explaining what went wrong if attach fails
lldb::SBProcess
AttachToProcess (const char *name, // basename of process to attach to
bool wait_for, // if true wait for a new instance of "name" to be launched
SBError& error); // An error explaining what went wrong if attach fails
lldb::SBFileSpec lldb::SBFileSpec
GetExecutable (); GetExecutable ();

View File

@ -26,6 +26,9 @@ public:
bool bool
IsValid() const; IsValid() const;
SBError
GetError();
const char * const char *
GetName(); GetName();

View File

@ -128,6 +128,22 @@ SBTarget::LaunchProcess
uint32_t launch_flags, uint32_t launch_flags,
bool stop_at_entry bool stop_at_entry
) )
{
SBError sb_error;
return LaunchProcess (argv, envp, tty, launch_flags, stop_at_entry, sb_error);
}
SBProcess
SBTarget::LaunchProcess
(
char const **argv,
char const **envp,
const char *tty,
uint32_t launch_flags,
bool stop_at_entry,
SBError &error
)
{ {
SBProcess sb_process; SBProcess sb_process;
if (m_opaque_sp) if (m_opaque_sp)
@ -146,7 +162,7 @@ SBTarget::LaunchProcess
if (sb_process.IsValid()) if (sb_process.IsValid())
{ {
Error error (sb_process->Launch (argv, envp, launch_flags, tty, tty, tty)); error.SetError (sb_process->Launch (argv, envp, launch_flags, tty, tty, tty));
if (error.Success()) if (error.Success())
{ {
// We we are stopping at the entry point, we can return now! // We we are stopping at the entry point, we can return now!
@ -158,7 +174,7 @@ SBTarget::LaunchProcess
if (state == eStateStopped) if (state == eStateStopped)
{ {
// resume the process to skip the entry point // resume the process to skip the entry point
error = sb_process->Resume(); error.SetError (sb_process->Resume());
if (error.Success()) if (error.Success())
{ {
// If we are doing synchronous mode, then wait for the // If we are doing synchronous mode, then wait for the
@ -169,10 +185,98 @@ SBTarget::LaunchProcess
} }
} }
} }
else
{
error.SetErrorString ("unable to create lldb_private::Process");
}
}
else
{
error.SetErrorString ("SBTarget is invalid");
} }
return sb_process; return sb_process;
} }
lldb::SBProcess
SBTarget::AttachToProcess
(
lldb::pid_t pid,// The process ID to attach to
SBError& error // An error explaining what went wrong if attach fails
)
{
SBProcess sb_process;
if (m_opaque_sp)
{
// DEPRECATED, this will change when CreateProcess is removed...
if (m_opaque_sp->GetProcessSP())
{
sb_process.SetProcess(m_opaque_sp->GetProcessSP());
}
else
{
// When launching, we always want to create a new process When
// SBTarget::CreateProcess is removed, this will always happen.
sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener()));
}
if (sb_process.IsValid())
{
error.SetError (sb_process->Attach (pid));
}
else
{
error.SetErrorString ("unable to create lldb_private::Process");
}
}
else
{
error.SetErrorString ("SBTarget is invalid");
}
return sb_process;
}
lldb::SBProcess
SBTarget::AttachToProcess
(
const char *name, // basename of process to attach to
bool wait_for, // if true wait for a new instance of "name" to be launched
SBError& error // An error explaining what went wrong if attach fails
)
{
SBProcess sb_process;
if (m_opaque_sp)
{
// DEPRECATED, this will change when CreateProcess is removed...
if (m_opaque_sp->GetProcessSP())
{
sb_process.SetProcess(m_opaque_sp->GetProcessSP());
}
else
{
// When launching, we always want to create a new process When
// SBTarget::CreateProcess is removed, this will always happen.
sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener()));
}
if (sb_process.IsValid())
{
error.SetError (sb_process->Attach (name, wait_for));
}
else
{
error.SetErrorString ("unable to create lldb_private::Process");
}
}
else
{
error.SetErrorString ("SBTarget is invalid");
}
return sb_process;
}
SBFileSpec SBFileSpec
SBTarget::GetExecutable () SBTarget::GetExecutable ()
{ {

View File

@ -53,6 +53,17 @@ SBValue::IsValid () const
return (m_opaque_sp.get() != NULL); return (m_opaque_sp.get() != NULL);
} }
SBError
SBValue::GetError()
{
SBError sb_error;
if (m_opaque_sp.get())
sb_error.SetError(m_opaque_sp->GetError());
return sb_error;
}
const char * const char *
SBValue::GetName() SBValue::GetName()
{ {