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
diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp
index 4566f76..2ebf7f6 100644
--- a/lldb/source/API/SBProcess.cpp
+++ b/lldb/source/API/SBProcess.cpp
@@ -141,7 +141,7 @@
     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 @@
     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 4631464..e7a8572 100644
--- a/lldb/test/lldbutil.py
+++ b/lldb/test/lldbutil.py
@@ -162,6 +162,8 @@
         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 @@
     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 @@
     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 @@
     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 474ae06..d00ad19 100644
--- a/lldb/test/python_api/process/TestProcessAPI.py
+++ b/lldb/test/python_api/process/TestProcessAPI.py
@@ -5,7 +5,7 @@
 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 @@
         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 @@
         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