Great! Thank you, S.
On Jun 29, 2013, at 02:12 , Greg Clayton <[email protected]> wrote: > Sure thing: > > Author: gclayton > Date: Fri Jun 28 19:10:32 2013 > New Revision: 185245 > > URL: http://llvm.org/viewvc/llvm-project?rev=185245&view=rev > Log: > Fixed SBProcess::RemoteLaunch() to use the platform executable path. Patch > from Sebastien Metrot. > > Modified: > lldb/trunk/source/API/SBProcess.cpp > > Modified: lldb/trunk/source/API/SBProcess.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBProcess.cpp?rev=185245&r1=185244&r2=185245&view=diff > ============================================================================== > --- lldb/trunk/source/API/SBProcess.cpp (original) > +++ lldb/trunk/source/API/SBProcess.cpp Fri Jun 28 19:10:32 2013 > @@ -173,7 +173,7 @@ SBProcess::RemoteLaunch (char const **ar > launch_flags); > Module *exe_module = > process_sp->GetTarget().GetExecutableModulePointer(); > if (exe_module) > - launch_info.SetExecutableFile(exe_module->GetFileSpec(), > true); > + > launch_info.SetExecutableFile(exe_module->GetPlatformFileSpec(), true); > if (argv) > launch_info.GetArguments().AppendArguments (argv); > if (envp) > > On Jun 28, 2013, at 1:26 PM, Sebastien Metrot <[email protected]> wrote: > >> Cool! Any chance to have this committed to svn? (Sorry to be a pain) >> >> Thanks, >> >> S. >> >> On Jun 27, 2013, at 20:03 , Greg Clayton <[email protected]> wrote: >> >>> That looks fine. >>> >>> On Jun 27, 2013, at 3:49 AM, Sebastien Metrot <[email protected]> wrote: >>> >>>> Greg, >>>> >>>> I have updated the sources today to see if the remote launch has been >>>> fixed but it still doesn't work here so I'm proposing the following change. >>>> >>>> Cheers, >>>> >>>> S. >>>> >>>> >>>> Index: source/API/SBProcess.cpp >>>> =================================================================== >>>> --- source/API/SBProcess.cpp (revision 185064) >>>> +++ source/API/SBProcess.cpp (working copy) >>>> @@ -173,7 +173,7 @@ >>>> launch_flags); >>>> Module *exe_module = >>>> process_sp->GetTarget().GetExecutableModulePointer(); >>>> if (exe_module) >>>> - launch_info.SetExecutableFile(exe_module->GetFileSpec(), >>>> true); >>>> + >>>> launch_info.SetExecutableFile(exe_module->GetPlatformFileSpec(), true); >>>> if (argv) >>>> launch_info.GetArguments().AppendArguments (argv); >>>> if (envp) >>>> >>>> >>>> >>>> On Jun 25, 2013, at 16:14 , Sebastien Metrot <[email protected]> wrote: >>>> >>>>> Greg, >>>>> >>>>> I tried this solution but it didn't work because there may be a bug in >>>>> SBTarget.cpp line 176: >>>>> launch_info.SetExecutableFile(exe_module->GetFileSpec(), true); >>>>> >>>>> Shouldn't this read GetPlatformFileSpec instead of GetFileSpec? >>>>> >>>>> Cheers, >>>>> >>>>> S. >>>>> >>>>> >>>>> On Jun 24, 2013, at 19:58 , Greg Clayton <[email protected]> wrote: >>>>> >>>>>> >>>>>> after you create the target, you need to grab the executable module from >>>>>> the SBTarget and call "SBModule::SetPlatformFileSpec(SBFileSpec)" on it. >>>>>> >>>>>> // First create debugger >>>>>> SBError error; >>>>>> SBTarget target = debugger.CreateTarget("/local/path/a.out", >>>>>> "x86_64-apple-macosx", "remote-macosx", false, error); >>>>>> >>>>>> SBModule exe_module = target.FindModule(target.GetExecutable()); >>>>>> >>>>>> Then set the platform path: >>>>>> >>>>>> if (exe_module.IsValid()) >>>>>> { >>>>>> SBFileSpec remote_path ("/remote/path/a.out", false); >>>>>> exe_module.SetPlatformFileSpec (remote_path); >>>>>> >>>>>> process = target.ConnectRemote(...) >>>>>> >>>>>> process.RemoteLaunch(...) >>>>>> >>>>>> } >>>>>> >>>>>> This will only work if you are connecting to a debugserver that is not >>>>>> running a process yet. There are two ways to start debugserver: >>>>>> 1 - with no process >>>>>> 2 - have it launch a process and wait to attach >>>>>> >>>>>> We will assume we have two hosts here: local.foo.com (where you want to >>>>>> debug from), remote.foo.com (the remote host which will run the process). >>>>>> >>>>>> When you launch with no process, you start debugserver with no process >>>>>> specified: >>>>>> >>>>>> remote.foo.com% debugserver remote.foo.com:1234 >>>>>> >>>>>> Then you would follow the exact steps from above. >>>>>> >>>>>> If you launch debugserver and give it a process already: >>>>>> >>>>>> remote.foo.com% debugserver remote.foo.com:1234 -- /remote/path/a.out >>>>>> --arg --foo --bar >>>>>> >>>>>> Then after you call ConnectRemote() you should have a live process and >>>>>> you won't require a remote launch. LLDB will be able to match up the >>>>>> remote path coming in ("/remote/path/a.out") with your local path by >>>>>> matching the UUID values as long as you created your target with the >>>>>> correct local copy of your binary ("/local/path/a.out"), with no need to >>>>>> call "SetPlatformFileSpec()". >>>>>> >>>>>> Likewise if you have 4 shared libraries that you built locally and are >>>>>> somehow loading moving them over to the remote system so they get used >>>>>> while debugging and these files are not part of your normal sysroot that >>>>>> you mounted, you can tell the target about the local copies: >>>>>> >>>>>> SBModule shlib_module1 = target.AddModule ("/local/path/libfoo.dylib", >>>>>> "x86_64-apple-macosx", NULL); >>>>>> SBModule shlib_module2 = target.AddModule ("/local/path/libbar.dylib", >>>>>> "x86_64-apple-macosx", NULL); >>>>>> SBModule shlib_module3 = target.AddModule ("/local/path/libbaz.dylib", >>>>>> "x86_64-apple-macosx", NULL); >>>>>> >>>>>> You do this right after creating your target. Then LLDB knows about >>>>>> these shared libraries in its global module cache and can find them when >>>>>> we connect to your process even if the paths are totally different and >>>>>> even if you don't cal SetPlatformFileSpec on each module. >>>>>> >>>>>> Greg Clayton >>>>>> >>>>>> >>>>>> On Jun 23, 2013, at 7:04 AM, Sebastien Metrot <[email protected]> wrote: >>>>>> >>>>>>> Hello, >>>>>>> >>>>>>> I'm now investigating how to start a remote debugging session. >>>>>>> I create a debugger, then a target (with the local path of the >>>>>>> executable), and then a process with SBTarget::ConnectRemote. When I >>>>>>> get the status changed event that tells me the debugger is connected I >>>>>>> try to launch the remote application with SBProcess::RemoteLaunch but I >>>>>>> get an error: "Remote Launch result: No such file or directory (path to >>>>>>> my local executable)" and that's because the remote executable is not >>>>>>> stored in the same path than the local one, but I haven't found a way >>>>>>> to give that information to SBTarget or SBProcess. I have tried to pass >>>>>>> it as the first argument of SBProcess::RemoteLaunch but it doesn't work >>>>>>> as the first thing this method does is to insert the local target path >>>>>>> in the argument list. >>>>>>> If I comment the lines 175 and 176 in SBProcess.cpp that does the >>>>>>> insertion: >>>>>>> // if (exe_module) >>>>>>> // >>>>>>> launch_info.SetExecutableFile(exe_module->GetFileSpec(), true); >>>>>>> It then works beautifully. >>>>>>> >>>>>>> What is the correct way or achieving what I'm trying to do? Is there a >>>>>>> need for a new API or did I once again overlooked something? >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> S. >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> lldb-dev mailing list >>>>>>> [email protected] >>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> lldb-dev mailing list >>>>> [email protected] >>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>>> >>>> >>>> _______________________________________________ >>>> lldb-dev mailing list >>>> [email protected] >>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>> >> >> >> _______________________________________________ >> lldb-dev mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev > _______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
