Files
clang-p2996/lldb/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.h
Tamas Berghammer ccd6cffba3 Modify "platform connect" to connect to processes as well
The standard remote debugging workflow with gdb is to start the
application on the remote host under gdbserver (e.g.: gdbserver :5039
a.out) and then connect to it with gdb.

The same workflow is supported by debugserver/lldb-gdbserver with a very
similar syntax but to access all features of lldb we need to be
connected also to an lldb-platform instance running on the target.

Before this change this had to be done manually with starting a separate
lldb-platform on the target machine and then connecting to it with lldb
before connecting to the process.

This change modifies the behavior of "platform connect" with
automatically connecting to the process instance if it was started by
the remote platform. With this command replacing gdbserver in a gdb
based worflow is usually as simple as replacing the command to execute
gdbserver with executing lldb-platform.

Differential revision: http://reviews.llvm.org/D14952

llvm-svn: 255016
2015-12-08 14:08:19 +00:00

80 lines
2.1 KiB
C++

//===-- PlatformAndroidRemoteGDBServer.h ------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_PlatformAndroidRemoteGDBServer_h_
#define liblldb_PlatformAndroidRemoteGDBServer_h_
// C Includes
// C++ Includes
#include <map>
#include <utility>
// Other libraries and framework includes
// Project includes
#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
#include "llvm/ADT/Optional.h"
#include "AdbClient.h"
namespace lldb_private {
namespace platform_android {
class PlatformAndroidRemoteGDBServer : public platform_gdb_server::PlatformRemoteGDBServer
{
public:
PlatformAndroidRemoteGDBServer();
~PlatformAndroidRemoteGDBServer() override;
Error
ConnectRemote (Args& args) override;
Error
DisconnectRemote () override;
lldb::ProcessSP
ConnectProcess (const char* connect_url,
const char* plugin_name,
lldb_private::Debugger &debugger,
lldb_private::Target *target,
lldb_private::Error &error) override;
size_t
ConnectToWaitingProcesses(lldb_private::Debugger& debugger, lldb_private::Error& error) override;
protected:
std::string m_device_id;
std::map<lldb::pid_t, uint16_t> m_port_forwards;
llvm::Optional<AdbClient::UnixSocketNamespace> m_socket_namespace;
bool
LaunchGDBServer (lldb::pid_t &pid, std::string &connect_url) override;
bool
KillSpawnedProcess (lldb::pid_t pid) override;
void
DeleteForwardPort (lldb::pid_t pid);
Error
MakeConnectURL(const lldb::pid_t pid,
const uint16_t remote_port,
const char* remote_socket_name,
std::string& connect_url);
private:
DISALLOW_COPY_AND_ASSIGN (PlatformAndroidRemoteGDBServer);
};
} // namespace platform_android
} // namespace lldb_private
#endif // liblldb_PlatformAndroidRemoteGDBServer_h_