forked from OSchip/llvm-project
Add a test case ProcessAPITestCase.test_remote_launch() which tests SBProcess.RemoteLaunch()
API with a process not in eStateConnected, and checks that the remote launch failed. Modify SBProcess::RemoteLaunch()/RemoteAttachToProcessWithID()'s log statements to fix a crasher when logging is turned on. llvm-svn: 127055
This commit is contained in:
parent
4b598e156a
commit
930e3ad51e
|
@ -141,7 +141,7 @@ SBProcess::RemoteLaunch (char const **argv,
|
|||
if (log) {
|
||||
SBStream sstr;
|
||||
error.GetDescription (sstr);
|
||||
log->Printf ("SBProcess(%p)::RemoteLaunch (...) => SBError (%p): %s", error.get(), sstr.GetData());
|
||||
log->Printf ("SBProcess(%p)::RemoteLaunch (...) => SBError (%p): %s", m_opaque_sp.get(), error.get(), sstr.GetData());
|
||||
}
|
||||
|
||||
return error.Success();
|
||||
|
@ -171,7 +171,7 @@ SBProcess::RemoteAttachToProcessWithID (lldb::pid_t pid, lldb::SBError& error)
|
|||
if (log) {
|
||||
SBStream sstr;
|
||||
error.GetDescription (sstr);
|
||||
log->Printf ("SBProcess(%p)::RemoteAttachToProcessWithID (%d) => SBError (%p): %s", error.get(), sstr.GetData());
|
||||
log->Printf ("SBProcess(%p)::RemoteAttachToProcessWithID (%d) => SBError (%p): %s", m_opaque_sp.get(), pid, error.get(), sstr.GetData());
|
||||
}
|
||||
|
||||
return error.Success();
|
||||
|
|
|
@ -162,6 +162,8 @@ def StateTypeString(enum):
|
|||
return "invalid"
|
||||
elif enum == lldb.eStateUnloaded:
|
||||
return "unloaded"
|
||||
elif enum == lldb.eStateConnected:
|
||||
return "connected"
|
||||
elif enum == lldb.eStateAttaching:
|
||||
return "attaching"
|
||||
elif enum == lldb.eStateLaunching:
|
||||
|
@ -181,7 +183,7 @@ def StateTypeString(enum):
|
|||
elif enum == lldb.eStateSuspended:
|
||||
return "suspended"
|
||||
else:
|
||||
raise Exception("Unknown stopReason enum")
|
||||
raise Exception("Unknown StateType enum")
|
||||
|
||||
def StopReasonString(enum):
|
||||
"""Returns the stopReason string given an enum."""
|
||||
|
@ -202,7 +204,7 @@ def StopReasonString(enum):
|
|||
elif enum == lldb.eStopReasonPlanComplete:
|
||||
return "plancomplete"
|
||||
else:
|
||||
raise Exception("Unknown stopReason enum")
|
||||
raise Exception("Unknown StopReason enum")
|
||||
|
||||
def ValueTypeString(enum):
|
||||
"""Returns the valueType string given an enum."""
|
||||
|
@ -223,7 +225,7 @@ def ValueTypeString(enum):
|
|||
elif enum == lldb.eValueTypeConstResult:
|
||||
return "constant_result"
|
||||
else:
|
||||
raise Exception("Unknown valueType enum")
|
||||
raise Exception("Unknown ValueType enum")
|
||||
|
||||
|
||||
# ==================================================
|
||||
|
|
|
@ -5,7 +5,7 @@ Test SBProcess APIs, including ReadMemory(), WriteMemory(), and others.
|
|||
import os, time
|
||||
import unittest2
|
||||
import lldb
|
||||
from lldbutil import get_stopped_thread
|
||||
from lldbutil import get_stopped_thread, StateTypeString
|
||||
from lldbtest import *
|
||||
|
||||
class ProcessAPITestCase(TestBase):
|
||||
|
@ -51,6 +51,12 @@ class ProcessAPITestCase(TestBase):
|
|||
self.buildDwarf()
|
||||
self.access_my_int()
|
||||
|
||||
@python_api_test
|
||||
def test_remote_launch(self):
|
||||
"""Test SBProcess.RemoteLaunch() API with a process not in eStateConnected, and it should fail."""
|
||||
self.buildDefault()
|
||||
self.remote_launch_should_fail()
|
||||
|
||||
def setUp(self):
|
||||
# Call super's setUp().
|
||||
TestBase.setUp(self)
|
||||
|
@ -230,6 +236,24 @@ class ProcessAPITestCase(TestBase):
|
|||
for i in new_bytes:
|
||||
print "byte:", i
|
||||
|
||||
def remote_launch_should_fail(self):
|
||||
"""Test SBProcess.RemoteLaunch() API with a process not in eStateConnected, and it should fail."""
|
||||
exe = os.path.join(os.getcwd(), "a.out")
|
||||
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
|
||||
|
||||
target = self.dbg.CreateTarget(exe)
|
||||
self.assertTrue(target.IsValid(), VALID_TARGET)
|
||||
|
||||
# Launch the process, and do not stop at the entry point.
|
||||
error = lldb.SBError()
|
||||
process = target.Launch (self.dbg.GetListener(), None, None, os.ctermid(), os.ctermid(), os.ctermid(), None, 0, False, error)
|
||||
|
||||
print "process state:", StateTypeString(process.GetState())
|
||||
self.assertTrue(process.GetState() != lldb.eStateConnected)
|
||||
|
||||
success = process.RemoteLaunch(None, None, None, None, None, None, 0, False, error)
|
||||
self.assertTrue(not success, "RemoteLaunch() should fail for process state != eStateConnected")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import atexit
|
||||
|
|
Loading…
Reference in New Issue