Yes it can, but work is definitely needed. Linux to OSX will work because we 
have the lldb modified "debugserver" binary which can debug macosx apps. There 
is no linux equivalent because the current "debugserver" binary was initially 
made for the Mac only and it isn't well orgnanized to be used as a starting 
point for porting to other systems.

What I would like see happen, is in our Host layer (in "lldb/source/Host" and 
"lldb/include/lldb/Host"), we should have a native debug API that is very 
closely based on "lldb/tools/debugserver/source/DNB.h" and name it something 
like "lldb_private::NativeDebug". Once we do this, we can then support native 
debugging on every platform by making a new Process plugin in 
"lldb/source/Plugins/Process" called "Host" which would link against the new 
API in the lldb_private::NativeDebug. We then also have classes which implement 
remote GDB debugging inside lldb:

lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp

The "GDBRemoteCommunicationClient" class communicates with remote GDB servers.

The "GDBRemoteCommunicationServer" class implements the GDB server side of the 
connection. This is not currently being used in "debugserver". This 
"GDBRemoteCommunicationServer" class can then just link against the 
"lldb_private::NativeDebug" class to implement remote debugging. This way, both 
native and remote debugging always share the same base code.

There will need to be some work done on the build as well to make sure that all 
plug-ins needed for remote debugging get linked in. Right now there is code 
that disables many plug-ins when they shouldn't be disabled in 
"lldb/source/lldb.cpp" by using proprocessor directives. 

As for trying out remote debugging from linux, the flow would be to first 
launch debugserver on the mac side:

darwin% debugserver linux.foo.com:12345 -- /bin/ls -lAF

Then launch lldb and connect on linux:

linux% lldb
(lldb) platform select --sysroot /remote/path/to/macosx/root remote-macosx 
(lldb) file --arch x86_64 /remote/path/to/macosx/root/bin/ls 
(lldb) process connect connect://darwin.foo.com:12345
...

We also have code in LLDB that manages platforms. We see above we switched 
platforms from the default "localhost" platform to the "remote-macosx" platform 
above. When we get platforms working, the flow will change to this:

darwin% lldb-platform linux.foo.com:12345

Now we have a platform on our macosx machine that can answer many things:

linux% lldb
(lldb) platform select remote-macosx
(lldb) platform connect connect://darwin.foo.com:12345

(lldb) platform process list 
PID    PARENT USER       ARCH    NAME
====== ====== ========== ======= ============================
16773  164    gclayton   6       x86_64-apple-macosx mdworker
16712  16711  gclayton   6       x86_64-apple-macosx tcsh
16709  164    gclayton   6       x86_64-apple-macosx Terminal
16705  164    gclayton   6       x86_64-apple-macosx mdworker
16668  1      gclayton   6       x86_64-apple-macosx XType.FontHelper
16652  1      gclayton   4       i386-apple-macosx qtkittrustedmoviesservice
16651  1      gclayton   4       i386-apple-macosx com.apple.qtkitserver
16649  164    gclayton   6       x86_64-apple-macosx WebKitPluginAgent
...

(lldb) platform process info 16712
Process information for process 16712:
    pid = 16712
 parent = 16711
   name = tcsh
   file = /bin/tcsh
 arg[0] = -tcsh
   arch = x86_64-apple-macosx
    uid = 501  (gclayton)
...

Now we have an actual connection to a remote platform and we can ask the 
platform launch a process for us:

(lldb) platform process launch -- /bin/ls -lAF

The platforms will be able to upload/download files, install new applications, 
locate remote copies of platform files on the current computer, and much more. 
We havea  lot of that work started in our platform branch:

svn co http://llvm.org/svn/llvm-project/lldb/branches/lldb-platform-work 
lldb-platform

We have had time to finish it all up, but we did get started. The Xcode project 
for the MacOSX has a "lldb-platform" binary started that uses the GDB remote 
protocol to implement the communication between computers. It links against the 
"GDBRemoteCommunicationServer" and it uses this class to do most of the work. 
Take a look at:

tools/lldb-platform/lldb-platform.cpp

This will show you how easy it will be to implement the GDB remote 
communication for both the platform, and, in the future, for the 
lldb-debugserver that will wrap up the "lldb_private::NativeDebug" layer for 
remote debugging.

Greg Clayton


On Aug 25, 2012, at 6:34 AM, Carlo Kok <[email protected]> wrote:

> Hi,
> 
> Can LLDB do remote debugging from another platform? (Linux -> OSX for 
> example)? If so which side would load the symbols/have to have the source 
> files?
> 
> Is there documentation on how this protocol works?
> 
> 
> Thanks,
> 
> Carlo Kok
> _______________________________________________
> 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

Reply via email to