LLDB mainline
|
#include <GDBRemoteCommunication.h>
Classes | |
class | ScopedTimeout |
Public Types | |
enum class | PacketType { Invalid = 0 , Standard , Notify } |
enum class | PacketResult { Success = 0 , ErrorSendFailed , ErrorSendAck , ErrorReplyFailed , ErrorReplyTimeout , ErrorReplyInvalid , ErrorReplyAck , ErrorDisconnected , ErrorNoSequenceLock } |
Public Member Functions | |
GDBRemoteCommunication () | |
~GDBRemoteCommunication () override | |
PacketResult | GetAck () |
size_t | SendAck () |
size_t | SendNack () |
char | CalculcateChecksum (llvm::StringRef payload) |
PacketType | CheckForPacket (const uint8_t *src, size_t src_len, StringExtractorGDBRemote &packet) |
bool | GetSendAcks () |
std::chrono::seconds | SetPacketTimeout (std::chrono::seconds packet_timeout) |
std::chrono::seconds | GetPacketTimeout () const |
FileSpec | GetDebugserverPath (Platform *platform) |
Status | StartDebugserverProcess (const char *url, Platform *platform, ProcessLaunchInfo &launch_info, uint16_t *port, const Args *inferior_args, shared_fd_t pass_comm_fd) |
void | DumpHistory (Stream &strm) |
void | SetPacketRecorder (repro::PacketRecorder *recorder) |
![]() | |
Communication () | |
Construct the Communication object. | |
virtual | ~Communication () |
Destructor. | |
virtual void | Clear () |
lldb::ConnectionStatus | Connect (const char *url, Status *error_ptr) |
Connect using the current connection by passing url to its connect function. | |
virtual lldb::ConnectionStatus | Disconnect (Status *error_ptr=nullptr) |
Disconnect the communications connection if one is currently connected. | |
bool | IsConnected () const |
Check if the connection is valid. | |
bool | HasConnection () const |
lldb_private::Connection * | GetConnection () |
virtual size_t | Read (void *dst, size_t dst_len, const Timeout< std::micro > &timeout, lldb::ConnectionStatus &status, Status *error_ptr) |
Read bytes from the current connection. | |
size_t | Write (const void *src, size_t src_len, lldb::ConnectionStatus &status, Status *error_ptr) |
The actual write function that attempts to write to the communications protocol. | |
size_t | WriteAll (const void *src, size_t src_len, lldb::ConnectionStatus &status, Status *error_ptr) |
Repeatedly attempt writing until either src_len bytes are written or a permanent failure occurs. | |
virtual void | SetConnection (std::unique_ptr< Connection > connection) |
Sets the connection that it to be used by this class. | |
bool | GetCloseOnEOF () const |
void | SetCloseOnEOF (bool b) |
Static Public Member Functions | |
static llvm::Error | ConnectLocally (GDBRemoteCommunication &client, GDBRemoteCommunication &server) |
static std::string | ExpandRLE (std::string) |
Expand GDB run-length encoding. | |
![]() | |
static std::string | ConnectionStatusAsString (lldb::ConnectionStatus status) |
Protected Member Functions | |
PacketResult | SendPacketNoLock (llvm::StringRef payload) |
PacketResult | SendNotificationPacketNoLock (llvm::StringRef notify_type, std::deque< std::string > &queue, llvm::StringRef payload) |
PacketResult | SendRawPacketNoLock (llvm::StringRef payload, bool skip_ack=false) |
PacketResult | ReadPacket (StringExtractorGDBRemote &response, Timeout< std::micro > timeout, bool sync_on_timeout) |
PacketResult | WaitForPacketNoLock (StringExtractorGDBRemote &response, Timeout< std::micro > timeout, bool sync_on_timeout) |
bool | CompressionIsEnabled () |
bool | DecompressPacket () |
Status | StartListenThread (const char *hostname="127.0.0.1", uint16_t port=0) |
bool | JoinListenThread () |
lldb::thread_result_t | ListenThread () |
![]() | |
size_t | ReadFromConnection (void *dst, size_t dst_len, const Timeout< std::micro > &timeout, lldb::ConnectionStatus &status, Status *error_ptr) |
Protected Attributes | |
std::chrono::seconds | m_packet_timeout |
uint32_t | m_echo_number |
LazyBool | m_supports_qEcho |
GDBRemoteCommunicationHistory | m_history |
bool | m_send_acks |
bool | m_is_platform |
std::string | m_bytes |
std::recursive_mutex | m_bytes_mutex |
CompressionType | m_compression_type |
![]() | |
lldb::ConnectionSP | m_connection_sp |
The connection that is current in use by this communications class. | |
std::mutex | m_write_mutex |
Don't let multiple threads write at the same time... | |
bool | m_close_on_eof |
Private Member Functions | |
GDBRemoteCommunication (const GDBRemoteCommunication &)=delete | |
const GDBRemoteCommunication & | operator= (const GDBRemoteCommunication &)=delete |
Private Attributes | |
std::promise< uint16_t > | m_port_promise |
HostThread | m_listen_thread |
std::string | m_listen_url |
Definition at line 84 of file GDBRemoteCommunication.h.
|
strong |
Enumerator | |
---|---|
Success | |
ErrorSendFailed | |
ErrorSendAck | |
ErrorReplyFailed | |
ErrorReplyTimeout | |
ErrorReplyInvalid | |
ErrorReplyAck | |
ErrorDisconnected | |
ErrorNoSequenceLock |
Definition at line 88 of file GDBRemoteCommunication.h.
|
strong |
Enumerator | |
---|---|
Invalid | |
Standard | |
Notify |
Definition at line 86 of file GDBRemoteCommunication.h.
GDBRemoteCommunication::GDBRemoteCommunication | ( | ) |
Definition at line 60 of file GDBRemoteCommunication.cpp.
|
override |
Definition at line 73 of file GDBRemoteCommunication.cpp.
References lldb_private::Communication::Disconnect(), and lldb_private::Communication::IsConnected().
|
privatedelete |
char GDBRemoteCommunication::CalculcateChecksum | ( | llvm::StringRef | payload | ) |
Definition at line 84 of file GDBRemoteCommunication.cpp.
Referenced by CheckForPacket(), DecompressPacket(), SendNotificationPacketNoLock(), and SendPacketNoLock().
GDBRemoteCommunication::PacketType GDBRemoteCommunication::CheckForPacket | ( | const uint8_t * | src, |
size_t | src_len, | ||
StringExtractorGDBRemote & | packet | ||
) |
Definition at line 617 of file GDBRemoteCommunication.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::AddPacket(), CalculcateChecksum(), StringExtractor::Clear(), CompressionIsEnabled(), DecompressPacket(), lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::DidDumpToLog(), lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::Dump(), lldb_private::GDBRemotePacket::ePacketTypeRecv, ExpandRLE(), lldb_private::GetLog(), GetSendAcks(), lldb_private::StreamString::GetString(), lldb_private::Log::GetVerbose(), Invalid, LLDB_LOGF, m_bytes, m_bytes_mutex, m_history, Notify, lldb_private::process_gdb_remote::Packets, lldb_private::Stream::Printf(), lldb_private::Log::PutString(), SendAck(), SendNack(), StringExtractor::SetFilePos(), and Standard.
Referenced by WaitForPacketNoLock().
|
inlineprotected |
Definition at line 201 of file GDBRemoteCommunication.h.
References m_compression_type, and lldb_private::process_gdb_remote::None.
Referenced by CheckForPacket(), and DecompressPacket().
|
static |
Definition at line 1217 of file GDBRemoteCommunication.cpp.
References lldb_private::TCPSocket::Accept(), lldb_private::Status::AsCString(), lldb::eConnectionStatusSuccess, error(), lldb_private::TCPSocket::GetLocalPortNumber(), lldb_private::TCPSocket::Listen(), lldb_private::Communication::SetConnection(), and lldb_private::Status::ToError().
|
protected |
Definition at line 388 of file GDBRemoteCommunication.cpp.
References CalculcateChecksum(), CompressionIsEnabled(), lldb_private::GetLog(), GetSendAcks(), LLDB_LOGF, lldb_private::process_gdb_remote::LZ4, lldb_private::process_gdb_remote::LZFSE, lldb_private::process_gdb_remote::LZMA, m_bytes, m_compression_type, lldb_private::process_gdb_remote::Packets, SendAck(), SendNack(), and lldb_private::process_gdb_remote::ZlibDeflate.
Referenced by CheckForPacket().
void GDBRemoteCommunication::DumpHistory | ( | Stream & | strm | ) |
Definition at line 1214 of file GDBRemoteCommunication.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::Dump(), and m_history.
Referenced by lldb_private::process_gdb_remote::ProcessGDBRemote::DumpPluginHistory().
|
static |
Expand GDB run-length encoding.
Definition at line 1304 of file GDBRemoteCommunication.cpp.
Referenced by CheckForPacket().
GDBRemoteCommunication::PacketResult GDBRemoteCommunication::GetAck | ( | ) |
Definition at line 210 of file GDBRemoteCommunication.cpp.
References StringExtractorGDBRemote::eAck, ErrorSendAck, GetPacketTimeout(), StringExtractorGDBRemote::GetResponseType(), Success, and WaitForPacketNoLock().
Referenced by SendRawPacketNoLock().
Definition at line 883 of file GDBRemoteCommunication.cpp.
References lldb_private::FileSpec::AppendPathComponent(), lldb_private::FileSpec::Clear(), DEBUGSERVER_BASENAME, lldb_private::FileSystem::Exists(), lldb_private::Host::GetEnvironment(), lldb_private::GetLog(), lldb_private::FileSpec::GetPath(), lldb_private::FileSystem::Instance(), LLDB_LOGF, lldb_private::Platform::LocateExecutable(), lldb_private::process_gdb_remote::Process, and lldb_private::FileSpec::SetFile().
Referenced by lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::LaunchGDBServer(), and StartDebugserverProcess().
|
inline |
Definition at line 148 of file GDBRemoteCommunication.h.
References m_packet_timeout.
Referenced by GetAck(), lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::KillProcess(), lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::QueryNoAckModeSupported(), lldb_private::process_gdb_remote::GDBRemoteCommunication::ScopedTimeout::ScopedTimeout(), lldb_private::process_gdb_remote::GDBRemoteClientBase::SendPacketAndReceiveResponseWithOutputSupport(), and lldb_private::process_gdb_remote::GDBRemoteClientBase::SendPacketAndWaitForResponseNoLock().
|
inline |
Definition at line 135 of file GDBRemoteCommunication.h.
References m_send_acks.
Referenced by CheckForPacket(), DecompressPacket(), and SendRawPacketNoLock().
|
protected |
Definition at line 857 of file GDBRemoteCommunication.cpp.
References lldb_private::HostThread::IsJoinable(), lldb_private::HostThread::Join(), and m_listen_thread.
Referenced by StartDebugserverProcess().
|
protected |
Definition at line 863 of file GDBRemoteCommunication.cpp.
References lldb_private::ConnectionFileDescriptor::Connect(), lldb::eConnectionStatusSuccess, error(), lldb_private::Communication::GetConnection(), m_listen_url, and lldb_private::Communication::SetConnection().
Referenced by StartListenThread().
|
privatedelete |
|
protected |
Definition at line 224 of file GDBRemoteCommunication.cpp.
References lldb_private::GetLog(), StringExtractorGDBRemote::GetResponseType(), StringExtractor::GetStringRef(), LLDB_LOG, lldb_private::process_gdb_remote::Packets, Success, and WaitForPacketNoLock().
Referenced by lldb_private::process_gdb_remote::GDBRemoteCommunicationServer::GetPacketAndSendResponse(), lldb_private::process_gdb_remote::GDBRemoteClientBase::ReadPacketWithOutputSupport(), lldb_private::process_gdb_remote::GDBRemoteClientBase::SendContinuePacketAndWaitForResponse(), lldb_private::process_gdb_remote::GDBRemoteClientBase::SendPacketAndWaitForResponseNoLock(), and lldb_private::process_gdb_remote::GDBRemoteClientBase::ShouldStop().
size_t GDBRemoteCommunication::SendAck | ( | ) |
Definition at line 93 of file GDBRemoteCommunication.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::AddPacket(), lldb::eConnectionStatusSuccess, lldb_private::GDBRemotePacket::ePacketTypeSend, lldb_private::GetLog(), LLDB_LOGF, m_history, lldb_private::process_gdb_remote::Packets, and lldb_private::Communication::WriteAll().
Referenced by CheckForPacket(), DecompressPacket(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::HandshakeWithServer().
size_t GDBRemoteCommunication::SendNack | ( | ) |
Definition at line 103 of file GDBRemoteCommunication.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::AddPacket(), lldb::eConnectionStatusSuccess, lldb_private::GDBRemotePacket::ePacketTypeSend, lldb_private::GetLog(), LLDB_LOGF, m_history, lldb_private::process_gdb_remote::Packets, and lldb_private::Communication::WriteAll().
Referenced by CheckForPacket(), and DecompressPacket().
|
protected |
Definition at line 126 of file GDBRemoteCommunication.cpp.
References CalculcateChecksum(), lldb::eByteOrderBig, lldb_private::StreamString::GetString(), lldb_private::Stream::PutChar(), lldb_private::Stream::PutHex8(), SendRawPacketNoLock(), Success, and lldb_private::Stream::Write().
Referenced by lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendONotification(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendStopReplyPacketForThread(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendWResponse().
|
protected |
Definition at line 114 of file GDBRemoteCommunication.cpp.
References CalculcateChecksum(), lldb::eByteOrderBig, lldb_private::StreamString::GetString(), lldb_private::Stream::PutChar(), lldb_private::Stream::PutHex8(), SendRawPacketNoLock(), and lldb_private::Stream::Write().
Referenced by lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle__M(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_g(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_jLLDBTraceGetBinaryData(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_jModulesInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_jSignalsInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_jThreadsInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_memory_read(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_p(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qC(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qC(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qEcho(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qFileLoadAddress(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qfThreadInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qGetWorkingDir(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qGetWorkingDir(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qGroupName(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qHostInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qLaunchGDBServer(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qLaunchSuccess(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qMemoryRegionInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qMemTags(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qModuleInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qPathComplete(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qPlatform_chmod(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qPlatform_mkdir(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qPlatform_shell(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qProcessInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qProcessInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qProcessInfoPID(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qQueryGDBServer(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qRegisterInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qSaveCore(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_QSaveRegisterState(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qSpeedTest(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qsProcessInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qsThreadInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qSupported(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qUserName(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qWatchpointSupportInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_qXfer(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_stop_reason(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_vCont_actions(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_Close(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_Exists(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_FStat(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_MD5(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_Mode(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_Open(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_pRead(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_pWrite(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_Size(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_symlink(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_vFile_unlink(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::HandleNotificationAck(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServer::SendErrorResponse(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServer::SendOKResponse(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendONotification(), lldb_private::process_gdb_remote::GDBRemoteClientBase::SendPacketAndReceiveResponseWithOutputSupport(), lldb_private::process_gdb_remote::GDBRemoteClientBase::SendPacketAndWaitForResponseNoLock(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendStopReplyPacketForThread(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServer::SendUnimplementedResponse(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendWResponse(), and WaitForPacketNoLock().
|
protected |
Definition at line 149 of file GDBRemoteCommunication.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::AddPacket(), lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::DidDumpToLog(), lldb_private::process_gdb_remote::GDBRemoteCommunicationHistory::Dump(), lldb::eConnectionStatusSuccess, lldb_private::GDBRemotePacket::ePacketTypeSend, ErrorSendFailed, GetAck(), lldb_private::GetLog(), GetSendAcks(), lldb_private::StreamString::GetString(), lldb_private::Communication::IsConnected(), LLDB_LOGF, m_history, lldb_private::process_gdb_remote::Packets, lldb_private::Stream::Printf(), lldb_private::Log::PutString(), Success, and lldb_private::Communication::WriteAll().
Referenced by SendNotificationPacketNoLock(), and SendPacketNoLock().
void lldb_private::process_gdb_remote::GDBRemoteCommunication::SetPacketRecorder | ( | repro::PacketRecorder * | recorder | ) |
|
inline |
Definition at line 142 of file GDBRemoteCommunication.h.
References m_packet_timeout.
Referenced by lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::GetHostInfo(), lldb_private::process_gdb_remote::ProcessGDBRemote::ProcessGDBRemote(), and lldb_private::process_gdb_remote::GDBRemoteCommunication::ScopedTimeout::ScopedTimeout().
Status GDBRemoteCommunication::StartDebugserverProcess | ( | const char * | url, |
Platform * | platform, | ||
ProcessLaunchInfo & | launch_info, | ||
uint16_t * | port, | ||
const Args * | inferior_args, | ||
shared_fd_t | pass_comm_fd | ||
) |
Definition at line 942 of file GDBRemoteCommunication.cpp.
References lldb_private::Args::AppendArgument(), lldb_private::Args::AppendArguments(), lldb_private::ProcessLaunchInfo::AppendCloseFileAction(), lldb_private::ProcessLaunchInfo::AppendDuplicateFileAction(), lldb_private::ProcessLaunchInfo::AppendSuppressFileAction(), lldb_private::PipePosix::CanRead(), lldb_private::PipePosix::CanWrite(), lldb_private::Args::Clear(), lldb_private::PipePosix::Close(), lldb_private::PipePosix::CloseWriteFileDescriptor(), lldb_private::PipePosix::CreateNew(), lldb_private::PipePosix::CreateWithUniqueName(), DEBUGSERVER_BASENAME, lldb_private::PipePosix::Delete(), lldb_private::ProcessInfo::Dump(), error(), lldb_private::Status::FromErrorString(), lldb_private::Args::GetArgumentCount(), lldb_private::ProcessInfo::GetArguments(), lldb_private::StreamString::GetData(), GetDebugserverPath(), lldb_private::Host::GetEnvironment(), lldb_private::ProcessInfo::GetEnvironment(), lldb_private::ProcessInfo::GetExecutableFile(), lldb_private::ProcessLaunchInfo::GetLaunchInSeparateProcessGroup(), lldb_private::GetLog(), lldb_private::FileSpec::GetPath(), lldb_private::ProcessInfo::GetProcessID(), lldb_private::PipePosix::GetReadFileDescriptor(), lldb_private::StreamString::GetString(), lldb_private::PipePosix::GetWritePipe(), JoinListenThread(), lldb_private::SharedSocket::kInvalidFD, lldb_private::Host::LaunchProcess(), LLDB_INVALID_PROCESS_ID, LLDB_LOGF, m_port_promise, lldb_private::PipePosix::OpenAsReader(), lldb_private::Stream::Printf(), lldb_private::process_gdb_remote::Process, lldb_private::PipePosix::ReadWithTimeout(), and StartListenThread().
Referenced by lldb_private::process_gdb_remote::ProcessGDBRemote::LaunchAndConnectToDebugserver(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::LaunchGDBServer().
|
protected |
Definition at line 836 of file GDBRemoteCommunication.cpp.
References lldb_private::Status::FromError(), lldb_private::Status::FromErrorString(), lldb_private::HostThread::IsJoinable(), lldb_private::ThreadLauncher::LaunchThread(), ListenThread(), m_listen_thread, m_listen_url, and lldb_private::Communication::SetConnection().
Referenced by StartDebugserverProcess().
|
protected |
Sync the remote GDB server and make sure we get a response that corresponds to what we send.
Sends a "qEcho" packet and makes sure it gets the exact packet echoed back. If the qEcho packet isn't supported, we send a qC packet and make sure we get a valid thread ID back. We use the "qC" packet since its response if very unique: is responds with "QC%x" where x is the thread ID of the current thread. This makes the response unique enough from other packet responses to ensure we are back on track.
This packet is needed after we time out sending a packet so we can ensure that we are getting the response for the packet we are sending. There are no sequence IDs in the GDB remote protocol (there used to be, but they are not supported anymore) so if you timeout sending packet "abc", you might then send packet "cde" and get the response for the previous "abc" packet. Many responses are "OK" or "" (unsupported) or "EXX" (error) so many responses for packets can look like responses for other packets. So if we timeout, we need to ensure that we can get back on track. If we can't get back on track, we must disconnect.
Definition at line 242 of file GDBRemoteCommunication.cpp.
References CheckForPacket(), StringExtractor::Clear(), lldb_private::Communication::ConnectionStatusAsString(), lldb_private::Communication::Disconnect(), lldb::eConnectionStatusEndOfFile, lldb::eConnectionStatusError, lldb::eConnectionStatusInterrupted, lldb::eConnectionStatusLostConnection, lldb::eConnectionStatusNoConnection, lldb::eConnectionStatusSuccess, lldb::eConnectionStatusTimedOut, lldb_private::eLazyBoolYes, error(), ErrorDisconnected, ErrorReplyFailed, ErrorReplyTimeout, lldb_private::RegularExpression::Execute(), lldb_private::GetLog(), StringExtractor::GetStringRef(), Invalid, lldb_private::Communication::IsConnected(), LLDB_LOGV, m_echo_number, m_supports_qEcho, lldb_private::process_gdb_remote::Packets, lldb_private::Communication::Read(), SendPacketNoLock(), Success, and WaitForPacketNoLock().
Referenced by GetAck(), ReadPacket(), and WaitForPacketNoLock().
|
protected |
Definition at line 183 of file GDBRemoteCommunication.h.
Referenced by CheckForPacket(), and DecompressPacket().
|
protected |
Definition at line 184 of file GDBRemoteCommunication.h.
Referenced by CheckForPacket().
|
protected |
Definition at line 185 of file GDBRemoteCommunication.h.
Referenced by CompressionIsEnabled(), DecompressPacket(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::MaybeEnableCompression().
|
protected |
Definition at line 175 of file GDBRemoteCommunication.h.
Referenced by WaitForPacketNoLock().
|
protected |
Definition at line 177 of file GDBRemoteCommunication.h.
Referenced by CheckForPacket(), DumpHistory(), SendAck(), SendNack(), and SendRawPacketNoLock().
|
protected |
Definition at line 179 of file GDBRemoteCommunication.h.
|
private |
Definition at line 227 of file GDBRemoteCommunication.h.
Referenced by JoinListenThread(), and StartListenThread().
|
private |
Definition at line 228 of file GDBRemoteCommunication.h.
Referenced by ListenThread(), and StartListenThread().
|
protected |
Definition at line 174 of file GDBRemoteCommunication.h.
Referenced by GetPacketTimeout(), and SetPacketTimeout().
|
private |
Definition at line 225 of file GDBRemoteCommunication.h.
Referenced by StartDebugserverProcess().
|
protected |
|
protected |