diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp index 4566f76687f8..2ebf7f6911bf 100644 --- a/lldb/source/API/SBProcess.cpp +++ b/lldb/source/API/SBProcess.cpp @@ -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(); diff --git a/lldb/test/lldbutil.py b/lldb/test/lldbutil.py index 46314647d84a..e7a8572bbd55 100644 --- a/lldb/test/lldbutil.py +++ b/lldb/test/lldbutil.py @@ -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") # ================================================== diff --git a/lldb/test/python_api/process/TestProcessAPI.py b/lldb/test/python_api/process/TestProcessAPI.py index 474ae062059d..d00ad19ca09f 100644 --- a/lldb/test/python_api/process/TestProcessAPI.py +++ b/lldb/test/python_api/process/TestProcessAPI.py @@ -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