[lldb-dev] Remote side lldb unit tests

Greg Clayton gclayton at apple.com
Wed Dec 4 13:49:46 PST 2013


I believe you will need the lldb-platform and lldb-gdbserver to be in the same directory and compiled for the remote system you plan to test on.

For clarify "remote.foo.com%" will indicate commands to be run on the remote system, and "host.foo.com%" will be commands for the host computer...

remote.foo.com% ./lldb-platform --listen 2000
Listening for a connection on 2000...


host.foo.com% cd trunk/test
host.foo.com% ./dotest.py --arch=armv7 --platform-name=remote-ios --platform-url=connect://remote.foo.com:2000 --platform-working-dir=/var/root/test --compiler=/path/to/compiler/for/armv7/clang



Then things just run! Of course we don't have direct access to the phone via network, so we use a USB mix. So we run a program that forwards ports 2000-2010 on the remote system and it adds a port offset of 10000, so we tell the platform about the port offset and the port range it can use:

remote.foo.com% ./lldb-platform --listen 2000 --port-offset 10000 --min-gdbserver-port 2001 --max-gdbserver-port 2010


Then we add 10000 to 2000 when connecting in the --platform-url option:

host.foo.com% ./dotest.py --arch=armv7 --platform-name=remote-ios --platform-url=connect://remote.foo.com:12000 --platform-working-dir=/var/root/test --compiler=/path/to/compiler/for/armv7/clang

That is about it. Before you try running tests, you can test this manually:

remote.foo.com% ./lldb-platform --listen 2000
Listening for a connection on 2000...

host.foo.com% lldb
(lldb) platform select remote-ios
(lldb) platform connect connect://remote.foo.com:2000
(lldb) file a.out
(lldb) run

A few things I can think of that you will need to change:

1 - GDBRemoteCommunication::StartDebugserverProcess() is currently trying to locate the "debugserver" binary. You will need to change the #define:

#if defined(__APPLE__)
#define DEBUGSERVER_BASENAME    "debugserver"
#else
#define DEBUGSERVER_BASENAME    "lldb-gdbserver"
#endif

2 - You will need to make sure the "remote-linux" is working ok. When you type "run" above, it will run Platform::DebugProcess(...) and you will want to follow that through. For darwin this does:

lldb::ProcessSP
PlatformDarwin::DebugProcess (ProcessLaunchInfo &launch_info,
                              Debugger &debugger,
                              Target *target,       // Can be NULL, if NULL create a new target, else use existing one
                              Listener &listener,
                              Error &error)
{
    ProcessSP process_sp;
    
    if (IsHost())
    {
        process_sp = Platform::DebugProcess (launch_info, debugger, target, listener, error);
    }
    else
    {
        if (m_remote_platform_sp)
            process_sp = m_remote_platform_sp->DebugProcess (launch_info, debugger, target, listener, error);
        else
            error.SetErrorString ("the platform is not currently connected");
    }
    return process_sp;
    
}


which then calls down into the PlatformRemoteGDBServer::DebugProcess() when it is connected. The "m_remote_platform_sp" is part of PlatformPOSIX, so you might want to make sure that PlatformLinux inherits from PlatformPOSIX. You can probably move the PlatformDarwin::DebugProcess() function up into PlatformPOSIX if you need to.

Let me know when you get further!

Greg


On Dec 4, 2013, at 1:11 PM, Todd Fiala <tfiala at google.com> wrote:

> Hi all,
> 
> Greg - recently you mentioned some of the newer lldb work would support running remote-side unit tests.  Can you sketch out how you see that working?  I want to set up a few tests as I get started on the lldb-gdbserver work to validate my progress as I go along.
> 
> Thanks!
> 
> Sincerely,
> Todd Fiala
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev




More information about the lldb-dev mailing list