Great! Please let us know what works for you and any features you might want out of LLDB's remote debugging as you use it day to day.
Greg Clayton > On Nov 29, 2017, at 12:57 AM, Lior Halphon <l...@appdome.com> wrote: > > Thank you all very much! The script lines (especially "script > m.SetPlatformFileSpec("/bin/a.out")") were exactly what I was missing. I > ended up patching LLDB locally in order to debug, but now I can use Apple's > official LLDB builds. >> On 28 Nov 2017, at 22:06, Greg Clayton <clayb...@gmail.com >> <mailto:clayb...@gmail.com>> wrote: >> >> svn commit remote.html >> Sending remote.html >> Transmitting file data .done >> Committing transaction... >> Committed revision 319213. >> >> Please read through these changes at: >> >> http://lldb.llvm.org/remote.html <http://lldb.llvm.org/remote.html> >> >> and see if there are any mistakes or need for clarification. >> >> Greg >> >>> On Nov 28, 2017, at 11:17 AM, Jim Ingham <jing...@apple.com >>> <mailto:jing...@apple.com>> wrote: >>> >>> Thanks! >>> >>> Jim >>> >>> >>>> On Nov 28, 2017, at 11:16 AM, Greg Clayton <clayb...@gmail.com >>>> <mailto:clayb...@gmail.com>> wrote: >>>> >>>> I will update the remote.html web page with any info that is missing! I >>>> was about to go write the web page... Didn't realize we had one. >>>> >>>>> On Nov 28, 2017, at 11:08 AM, Jim Ingham <jing...@apple.com >>>>> <mailto:jing...@apple.com>> wrote: >>>>> >>>>> Hey, Greg, >>>>> >>>>> If you have a moment, could you add what isn't already there of this >>>>> useful info to http://lldb.llvm.org/remote.html? >>>>> <http://lldb.llvm.org/remote.html?> The correct answer to this question >>>>> should be "read http://lldb.llvm.org/remote.html >>>>> <http://lldb.llvm.org/remote.html>" but that doesn't seem as immediately >>>>> useful as your description. >>>>> >>>>> Jim >>>>> >>>>> >>>>>> On Nov 28, 2017, at 11:02 AM, Greg Clayton via lldb-dev >>>>>> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: >>>>>> >>>>>> lldb-server can be launched in two ways: >>>>>> 1 - platform connection mode >>>>>> 2 - debug a single process mode >>>>>> >>>>>> LLDB has two ways to connect to a remote process: >>>>>> 1 - you launch the GDB server yourself and attach to it >>>>>> 2 - you launch lldb-server in platform mode, connect to the platform, >>>>>> and then just debug like you normally would on a local machine. >>>>>> >>>>>> When you launch the GDB server yourself as mentioned in step 1 above, >>>>>> you can do: >>>>>> >>>>>> remote.foo.com <http://remote.foo.com/>% lldb-server gdbserver 1234 -- >>>>>> /bin/ls -lAF >>>>>> >>>>>> Then attach to it yourself: >>>>>> >>>>>> local.foo.com <http://local.foo.com/>% lldb >>>>>> (lldb) process connect connect://remote.foo.com:1234 >>>>>> <connect://remote.foo.com:1234> >>>>>> >>>>>> >>>>>> When you want an lldb-server to do the work of startup on the GDB server >>>>>> for you: >>>>>> >>>>>> remote.foo.com <http://remote.foo.com/>% lldb-server platform --server >>>>>> --listen 1234 >>>>>> >>>>>> Then you select the remote platform and connect to it with LLDB: >>>>>> >>>>>> local.foo.com <http://local.foo.com/>% lldb >>>>>> (lldb) platform select remote-macosx >>>>>> Platform: remote-macosx >>>>>> Connected: no >>>>>> (lldb) platform connect connect://localhost:1234 >>>>>> <connect://localhost:1234> >>>>>> Platform: remote-macosx >>>>>> Triple: x86_64-apple-macosx >>>>>> OS Version: 10.12.6 (16G1036) >>>>>> Kernel: Darwin Kernel Version 16.7.0: Wed Oct 4 00:17:00 PDT 2017; >>>>>> root:xnu-3789.71.6~1/RELEASE_X86_64 >>>>>> Hostname: gclayton-pro >>>>>> Connected: yes >>>>>> WorkingDir: /Users/gclayton >>>>>> >>>>>> Now LLDB has a "platform" connection to the remote machine that can >>>>>> start up the GDB server for you. Also note that the platform states what >>>>>> its working directory is (which defaults to the directory it was >>>>>> launched in). >>>>>> >>>>>> If you want to launch a locally built executable on the remote side, now >>>>>> you can do: >>>>>> >>>>>> (lldb) file a.out >>>>>> (lldb) run >>>>>> >>>>>> This will cause LLDB to create a target with the "a.out" executable that >>>>>> you cross built. Then you "run" and this will cause LLDB to upload >>>>>> "a.out" to the platform's current working directory only if the file has >>>>>> changed. The platform connection allows us to transfer files, but also >>>>>> allows us to get the MD5 checksum of the file on the other end in the >>>>>> current working directory and only upload the file if it has changed. If >>>>>> you don't want the "a.out" executable to be uploaded to the current >>>>>> platform working directory you can do to specify where the executable >>>>>> will be uploaded to: >>>>>> >>>>>> (lldb) file /local/path/to/a.out >>>>>> # Get the lldb.SBModule for "/local/path/to/a.out" in the local variable >>>>>> named "m": >>>>>> (lldb) script m = lldb.target.module['a.out'] >>>>>> # Set the platform path for the executable to "/bin/a.out": >>>>>> (lldb) script m.SetPlatformFileSpec("/bin/a.out") >>>>>> (lldb) run >>>>>> >>>>>> Now when you run your program, the program will be uploaded to >>>>>> "/bin/a.out" instead of the the current working directory of the >>>>>> platform. >>>>>> >>>>>> You can also change the platform working directory if you are connected >>>>>> to the platform >>>>>> >>>>>> (lldb) platform settings -w /tmp >>>>>> >>>>>> And you can verify it worked using "platform status": >>>>>> >>>>>> (lldb) platform status >>>>>> Platform: remote-macosx >>>>>> Triple: x86_64-apple-macosx >>>>>> OS Version: 10.12.6 (16G1036) >>>>>> Kernel: Darwin Kernel Version 16.7.0: Wed Oct 4 00:17:00 PDT 2017; >>>>>> root:xnu-3789.71.6~1/RELEASE_X86_64 >>>>>> Hostname: gclayton-pro >>>>>> Connected: yes >>>>>> WorkingDir: /private/tmp >>>>>> >>>>>> >>>>>> If you want to attach to a remote process, you can list the processes if >>>>>> you are connected: >>>>>> >>>>>> (lldb) platform process list >>>>>> 223 matching processes were found on "remote-macosx" >>>>>> PID PARENT USER TRIPLE NAME >>>>>> ====== ====== ========== ======================== >>>>>> ============================ >>>>>> 68881 96266 (null) x86_64-apple-macosx lldb-server >>>>>> 68639 90652 x86_64-apple-macosx lldb >>>>>> 67830 1 x86_64-apple-macosx helpd >>>>>> 67737 1 x86_64-apple-macosx com.apple.iCloudHelper >>>>>> >>>>>> ... >>>>>> >>>>>> Then attach: >>>>>> >>>>>> (lldb) attach 68639 >>>>>> >>>>>> Let me know if you have any questions. >>>>>> >>>>>> Greg Clayton >>>>>> >>>>>> >>>>>>> On Nov 28, 2017, at 9:29 AM, Adrian Prantl via lldb-dev >>>>>>> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: >>>>>>> >>>>>>> I would recommend asking this on the lldb mailing list instead. >>>>>>> >>>>>>> -- adrian >>>>>>> >>>>>>>> On Nov 26, 2017, at 8:30 AM, Lior Halphon via llvm-dev >>>>>>>> <llvm-...@lists.llvm.org <mailto:llvm-...@lists.llvm.org>> wrote: >>>>>>>> >>>>>>>> I'm trying to remotely launch and debug a new process with lldb >>>>>>>> without much success. >>>>>>>> >>>>>>>> Attaching to an already launched process works well by running these >>>>>>>> commands: >>>>>>>> >>>>>>>> process connect <url> >>>>>>>> process attach -P gdb-remote --pid <pid> >>>>>>>> >>>>>>>> But if I want debugserver to launch the executable by itself I'm >>>>>>>> running into troubles. Especially, I have no clue what arguments >>>>>>>> should I pass to >>>>>>>> target >>>>>>>> create >>>>>>>> . >>>>>>>> >>>>>>>> According to this page LLDB "will transparently take care of [..] >>>>>>>> downloading the executable in order to be able to debug", yet >>>>>>>> target >>>>>>>> create >>>>>>>> seem to always require a local file. If I specify the remote file via >>>>>>>> -r I get either >>>>>>>> unable >>>>>>>> to open target file >>>>>>>> or >>>>>>>> remote >>>>>>>> --> local transfer without local path is not implemented yet >>>>>>>> errors. If I set the target to a local file (such as a local copy of >>>>>>>> the remote's loader executable) without using -r, then attempt to run >>>>>>>> process >>>>>>>> launch -p gdb-remote -s <remote path> >>>>>>>> LLDB will attempt running the local path on the remote machine and >>>>>>>> fail. >>>>>>>> >>>>>>>> What are the correct commands I need to use in order to launch a >>>>>>>> remote process? >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> LLVM Developers mailing list >>>>>>>> llvm-...@lists.llvm.org <mailto:llvm-...@lists.llvm.org> >>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>>>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> lldb-dev mailing list >>>>>>> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >>>>>>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev> >>>>>> >>>>>> _______________________________________________ >>>>>> lldb-dev mailing list >>>>>> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >>>>>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev> >>>>> >>>> >>> >> >
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev