LLDB  mainline
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
lldb_private::process_gdb_remote::GDBRemoteCommunication Class Reference

#include <GDBRemoteCommunication.h>

Inheritance diagram for lldb_private::process_gdb_remote::GDBRemoteCommunication:
Inheritance graph
[legend]
Collaboration diagram for lldb_private::process_gdb_remote::GDBRemoteCommunication:
Collaboration graph
[legend]

Classes

class  ScopedTimeout
 

Public Types

enum  { eBroadcastBitRunPacketSent = kLoUserBroadcastBit, eBroadcastBitGdbReadThreadGotNotify }
 
enum  PacketType { PacketType::Invalid = 0, PacketType::Standard, PacketType::Notify }
 
enum  PacketResult {
  PacketResult::Success = 0, PacketResult::ErrorSendFailed, PacketResult::ErrorSendAck, PacketResult::ErrorReplyFailed,
  PacketResult::ErrorReplyTimeout, PacketResult::ErrorReplyInvalid, PacketResult::ErrorReplyAck, PacketResult::ErrorDisconnected,
  PacketResult::ErrorNoSequenceLock
}
 
- Public Types inherited from lldb_private::Communication
typedef void(* ReadThreadBytesReceived) (void *baton, const void *src, size_t src_len)
 

Public Member Functions

 GDBRemoteCommunication (const char *comm_name, const char *listener_name)
 
 ~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
 
Status StartDebugserverProcess (const char *url, Platform *platform, ProcessLaunchInfo &launch_info, uint16_t *port, const Args *inferior_args, int pass_comm_fd)
 
void DumpHistory (Stream &strm)
 
void SetHistoryStream (llvm::raw_ostream *strm)
 
- Public Member Functions inherited from lldb_private::Communication
 FLAGS_ANONYMOUS_ENUM ()
 
 Communication (const char *broadcaster_name)
 Construct the Communication object with the specified name for the Broadcaster that this object inherits from. More...
 
 ~Communication () override
 Destructor. More...
 
void Clear ()
 
lldb::ConnectionStatus Connect (const char *url, Status *error_ptr)
 Connect using the current connection by passing url to its connect function. More...
 
lldb::ConnectionStatus Disconnect (Status *error_ptr=nullptr)
 Disconnect the communications connection if one is currently connected. More...
 
bool IsConnected () const
 Check if the connection is valid. More...
 
bool HasConnection () const
 
lldb_private::ConnectionGetConnection ()
 
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. More...
 
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. More...
 
void SetConnection (Connection *connection)
 Sets the connection that it to be used by this class. More...
 
virtual bool StartReadThread (Status *error_ptr=nullptr)
 Starts a read thread whose sole purpose it to read bytes from the current connection. More...
 
virtual bool StopReadThread (Status *error_ptr=nullptr)
 Stops the read thread by cancelling it. More...
 
virtual bool JoinReadThread (Status *error_ptr=nullptr)
 
bool ReadThreadIsRunning ()
 Checks if there is a currently running read thread. More...
 
void SetReadThreadBytesReceivedCallback (ReadThreadBytesReceived callback, void *callback_baton)
 
void SynchronizeWithReadThread ()
 Wait for the read thread to process all outstanding data. More...
 
bool GetCloseOnEOF () const
 
void SetCloseOnEOF (bool b)
 
ConstStringGetBroadcasterClass () const override
 
- Public Member Functions inherited from lldb_private::Broadcaster
 Broadcaster (lldb::BroadcasterManagerSP manager_sp, const char *name)
 Construct with a broadcaster with a name. More...
 
virtual ~Broadcaster ()
 Destructor. More...
 
void CheckInWithManager ()
 
void BroadcastEvent (lldb::EventSP &event_sp)
 Broadcast an event which has no associated data. More...
 
void BroadcastEventIfUnique (lldb::EventSP &event_sp)
 
void BroadcastEvent (uint32_t event_type, const lldb::EventDataSP &event_data_sp)
 
void BroadcastEvent (uint32_t event_type, EventData *event_data=nullptr)
 
void BroadcastEventIfUnique (uint32_t event_type, EventData *event_data=nullptr)
 
void Clear ()
 
virtual void AddInitialEventsToListener (const lldb::ListenerSP &listener_sp, uint32_t requested_events)
 
uint32_t AddListener (const lldb::ListenerSP &listener_sp, uint32_t event_mask)
 Listen for any events specified by event_mask. More...
 
ConstString GetBroadcasterName ()
 Get the NULL terminated C string name of this Broadcaster object. More...
 
bool GetEventNames (Stream &s, const uint32_t event_mask, bool prefix_with_broadcaster_name) const
 Get the event name(s) for one or more event bits. More...
 
void SetEventName (uint32_t event_mask, const char *name)
 Set the name for an event bit. More...
 
const char * GetEventName (uint32_t event_mask) const
 
bool EventTypeHasListeners (uint32_t event_type)
 
bool RemoveListener (const lldb::ListenerSP &listener_sp, uint32_t event_mask=UINT32_MAX)
 Removes a Listener from this broadcasters list and frees the event bits specified by event_mask that were previously acquired by listener (assuming listener was listening to this object) for other listener objects to use. More...
 
bool HijackBroadcaster (const lldb::ListenerSP &listener_sp, uint32_t event_mask=UINT32_MAX)
 Provides a simple mechanism to temporarily redirect events from broadcaster. More...
 
bool IsHijackedForEvent (uint32_t event_mask)
 
void RestoreBroadcaster ()
 Restore the state of the Broadcaster from a previous hijack attempt. More...
 
lldb::BroadcasterManagerSP GetManager ()
 

Static Public Member Functions

static llvm::Error ConnectLocally (GDBRemoteCommunication &client, GDBRemoteCommunication &server)
 
- Static Public Member Functions inherited from lldb_private::Communication
static lldb::thread_result_t ReadThread (lldb::thread_arg_t comm_ptr)
 The static read thread function. More...
 
static const char * ConnectionStatusAsCString (lldb::ConnectionStatus status)
 
static ConstStringGetStaticBroadcasterClass ()
 

Protected Member Functions

PacketResult SendPacketNoLock (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 ReadPacketWithOutputSupport (StringExtractorGDBRemote &response, Timeout< std::micro > timeout, bool sync_on_timeout, llvm::function_ref< void(llvm::StringRef)> output_callback)
 
PacketResult PopPacketFromQueue (StringExtractorGDBRemote &response, Timeout< std::micro > 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 ()
 
void AppendBytesToCache (const uint8_t *bytes, size_t len, bool broadcast, lldb::ConnectionStatus status) override
 Append new bytes that get read from the read thread into the internal object byte cache. More...
 
- Protected Member Functions inherited from lldb_private::Communication
size_t ReadFromConnection (void *dst, size_t dst_len, const Timeout< std::micro > &timeout, lldb::ConnectionStatus &status, Status *error_ptr)
 
size_t GetCachedBytes (void *dst, size_t dst_len)
 Get any available bytes from our data cache. More...
 
- Protected Member Functions inherited from lldb_private::Broadcaster
BroadcasterImplSP GetBroadcasterImpl ()
 
const char * GetHijackingListenerName ()
 

Static Protected Member Functions

static lldb::thread_result_t ListenThread (lldb::thread_arg_t arg)
 

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
 
CompressionType m_compression_type
 
- Protected Attributes inherited from lldb_private::Communication
lldb::ConnectionSP m_connection_sp
 The connection that is current in use by this communications class. More...
 
HostThread m_read_thread
 The read thread handle in case we need to cancel the thread. More...
 
std::atomic< bool > m_read_thread_enabled
 
std::atomic< bool > m_read_thread_did_exit
 
std::string m_bytes
 A buffer to cache bytes read in the ReadThread function. More...
 
std::recursive_mutex m_bytes_mutex
 A mutex to protect multi-threaded access to the cached bytes. More...
 
std::mutex m_write_mutex
 Don't let multiple threads write at the same time... More...
 
std::mutex m_synchronize_mutex
 
ReadThreadBytesReceived m_callback
 
void * m_callback_baton
 
bool m_close_on_eof
 

Additional Inherited Members

- Protected Types inherited from lldb_private::Broadcaster
typedef std::shared_ptr< BroadcasterImplBroadcasterImplSP
 
typedef std::weak_ptr< BroadcasterImplBroadcasterImplWP
 

Detailed Description

Definition at line 53 of file GDBRemoteCommunication.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
eBroadcastBitRunPacketSent 
eBroadcastBitGdbReadThreadGotNotify 

Definition at line 55 of file GDBRemoteCommunication.h.

◆ PacketResult

Enumerator
Success 
ErrorSendFailed 
ErrorSendAck 
ErrorReplyFailed 
ErrorReplyTimeout 
ErrorReplyInvalid 
ErrorReplyAck 
ErrorDisconnected 
ErrorNoSequenceLock 

Definition at line 63 of file GDBRemoteCommunication.h.

◆ PacketType

Enumerator
Invalid 
Standard 
Notify 

Definition at line 61 of file GDBRemoteCommunication.h.

Constructor & Destructor Documentation

◆ GDBRemoteCommunication()

GDBRemoteCommunication::GDBRemoteCommunication ( const char *  comm_name,
const char *  listener_name 
)

Definition at line 58 of file GDBRemoteCommunication.cpp.

References lldb_private::process_gdb_remote::None.

◆ ~GDBRemoteCommunication()

GDBRemoteCommunication::~GDBRemoteCommunication ( )
override

Member Function Documentation

◆ AppendBytesToCache()

void GDBRemoteCommunication::AppendBytesToCache ( const uint8_t *  src,
size_t  src_len,
bool  broadcast,
lldb::ConnectionStatus  status 
)
overrideprotectedvirtual

Append new bytes that get read from the read thread into the internal object byte cache.

This will cause a eBroadcastBitReadThreadGotBytes event to be broadcast if broadcast is true.

Subclasses can override this function in order to inspect the received data and check if a packet is available.

Subclasses can also still call this function from the overridden method to allow the caching to correctly happen and suppress the broadcasting of the eBroadcastBitReadThreadGotBytes event by setting broadcast to false.

Parameters
[in]srcA source buffer that must be at least src_len bytes long.
[in]src_lenThe number of bytes to append to the cache.

Reimplemented from lldb_private::Communication.

Definition at line 1322 of file GDBRemoteCommunication.cpp.

References lldb_private::Broadcaster::BroadcastEvent(), CheckForPacket(), eBroadcastBitGdbReadThreadGotNotify, ErrorDisconnected, ErrorNoSequenceLock, ErrorReplyAck, ErrorReplyFailed, ErrorReplyInvalid, ErrorReplyTimeout, ErrorSendAck, ErrorSendFailed, StringExtractor::GetStringRef(), Invalid, Notify, Standard, and Success.

◆ CalculcateChecksum()

char GDBRemoteCommunication::CalculcateChecksum ( llvm::StringRef  payload)

Definition at line 88 of file GDBRemoteCommunication.cpp.

Referenced by CheckForPacket(), DecompressPacket(), and SendPacketNoLock().

◆ CheckForPacket()

GDBRemoteCommunication::PacketType GDBRemoteCommunication::CheckForPacket ( const uint8_t *  src,
size_t  src_len,
StringExtractorGDBRemote packet 
)

◆ CompressionIsEnabled()

bool lldb_private::process_gdb_remote::GDBRemoteCommunication::CompressionIsEnabled ( )
inlineprotected

Definition at line 173 of file GDBRemoteCommunication.h.

References lldb_private::process_gdb_remote::None.

Referenced by CheckForPacket(), and DecompressPacket().

◆ ConnectLocally()

llvm::Error GDBRemoteCommunication::ConnectLocally ( GDBRemoteCommunication client,
GDBRemoteCommunication server 
)
static

◆ DecompressPacket()

bool GDBRemoteCommunication::DecompressPacket ( )
protected

◆ DumpHistory()

void GDBRemoteCommunication::DumpHistory ( Stream strm)

◆ GetAck()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::GetAck ( )

◆ GetPacketTimeout()

std::chrono::seconds lldb_private::process_gdb_remote::GDBRemoteCommunication::GetPacketTimeout ( ) const
inline

◆ GetSendAcks()

bool lldb_private::process_gdb_remote::GDBRemoteCommunication::GetSendAcks ( )
inline

Definition at line 110 of file GDBRemoteCommunication.h.

Referenced by CheckForPacket(), DecompressPacket(), and SendRawPacketNoLock().

◆ JoinListenThread()

bool GDBRemoteCommunication::JoinListenThread ( )
protected

◆ ListenThread()

lldb::thread_result_t GDBRemoteCommunication::ListenThread ( lldb::thread_arg_t  arg)
staticprotected

◆ PopPacketFromQueue()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::PopPacketFromQueue ( StringExtractorGDBRemote response,
Timeout< std::micro >  timeout 
)
protected

◆ ReadPacket()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::ReadPacket ( StringExtractorGDBRemote response,
Timeout< std::micro >  timeout,
bool  sync_on_timeout 
)
protected

◆ ReadPacketWithOutputSupport()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::ReadPacketWithOutputSupport ( StringExtractorGDBRemote response,
Timeout< std::micro >  timeout,
bool  sync_on_timeout,
llvm::function_ref< void(llvm::StringRef)>  output_callback 
)
protected

◆ SendAck()

size_t GDBRemoteCommunication::SendAck ( )

◆ SendNack()

size_t GDBRemoteCommunication::SendNack ( )

◆ SendPacketNoLock()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::SendPacketNoLock ( llvm::StringRef  payload)
protected

Definition at line 122 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::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_jTraceConfigRead(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_jTraceRead(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_jTraceStart(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_memory_read(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::Handle_p(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::Handle_qC(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::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::GDBRemoteCommunicationServerPlatform::Handle_qGetWorkingDir(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::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::GDBRemoteCommunicationServerCommon::Handle_qModuleInfo(), 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::GDBRemoteCommunicationServerPlatform::Handle_qProcessInfo(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::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_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_auxv_read(), 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_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::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::GDBRemoteClientBase::SendvContPacket(), lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::SendWResponse(), and WaitForPacketNoLock().

◆ SendRawPacketNoLock()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::SendRawPacketNoLock ( llvm::StringRef  payload,
bool  skip_ack = false 
)
protected

◆ SetHistoryStream()

void GDBRemoteCommunication::SetHistoryStream ( llvm::raw_ostream *  strm)

◆ SetPacketTimeout()

std::chrono::seconds lldb_private::process_gdb_remote::GDBRemoteCommunication::SetPacketTimeout ( std::chrono::seconds  packet_timeout)
inline

◆ StartDebugserverProcess()

Status GDBRemoteCommunication::StartDebugserverProcess ( const char *  url,
Platform platform,
ProcessLaunchInfo launch_info,
uint16_t port,
const Args inferior_args,
int  pass_comm_fd 
)

Definition at line 931 of file GDBRemoteCommunication.cpp.

References lldb_private::Args::AppendArgument(), lldb_private::Args::AppendArguments(), lldb_private::ProcessLaunchInfo::AppendCloseFileAction(), lldb_private::ProcessLaunchInfo::AppendDuplicateFileAction(), lldb_private::FileSpec::AppendPathComponent(), lldb_private::ProcessLaunchInfo::AppendSuppressFileAction(), lldb_private::Status::AsCString(), lldb_private::FileSpec::Clear(), lldb_private::Args::Clear(), DEBUGSERVER_BASENAME, lldb_private::ProcessInfo::Dump(), lldb_private::FileSystem::Exists(), lldb_private::Status::Fail(), GDBR_LOG_PROCESS, lldb_private::Args::GetArgumentCount(), lldb_private::ProcessInfo::GetArguments(), lldb_private::Communication::GetConnection(), lldb_private::StreamString::GetData(), lldb_private::ProcessInfo::GetEnvironment(), lldb_private::Host::GetEnvironment(), lldb_private::ProcessInfo::GetExecutableFile(), lldb_private::ProcessLaunchInfo::GetLaunchInSeparateProcessGroup(), lldb_private::ConnectionFileDescriptor::GetListeningPort(), lldb_private::process_gdb_remote::ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(), lldb_private::FileSpec::GetPath(), lldb_private::ProcessInfo::GetProcessID(), lldb_private::StreamString::GetString(), lldb_private::FileSystem::Instance(), JoinListenThread(), lldb_private::Host::LaunchProcess(), LLDB_INVALID_PROCESS_ID, lldb_private::Platform::LocateExecutable(), PATH_MAX, lldb_private::Log::Printf(), lldb_private::Stream::Printf(), lldb_private::Status::SetErrorString(), lldb_private::Status::SetErrorStringWithFormat(), lldb_private::FileSpec::SetFile(), StartListenThread(), lldb_private::Status::Success(), and lldb_private::StringConvert::ToUInt32().

Referenced by lldb_private::process_gdb_remote::ProcessGDBRemote::LaunchAndConnectToDebugserver(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationServerPlatform::LaunchGDBServer().

◆ StartListenThread()

Status GDBRemoteCommunication::StartListenThread ( const char *  hostname = "127.0.0.1",
uint16_t  port = 0 
)
protected

◆ WaitForPacketNoLock()

GDBRemoteCommunication::PacketResult GDBRemoteCommunication::WaitForPacketNoLock ( StringExtractorGDBRemote response,
Timeout< std::micro >  timeout,
bool  sync_on_timeout 
)
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 268 of file GDBRemoteCommunication.cpp.

References CheckForPacket(), StringExtractor::Clear(), lldb_private::RegularExpression::Compile(), lldb_private::Communication::ConnectionStatusAsCString(), lldb_private::Communication::Disconnect(), lldb::eConnectionStatusEndOfFile, lldb::eConnectionStatusError, lldb::eConnectionStatusInterrupted, lldb::eConnectionStatusLostConnection, lldb::eConnectionStatusNoConnection, lldb::eConnectionStatusSuccess, lldb::eConnectionStatusTimedOut, lldb_private::eLazyBoolYes, ErrorDisconnected, ErrorReplyFailed, ErrorReplyTimeout, lldb_private::RegularExpression::Execute(), GDBR_LOG_PACKETS, lldb_private::process_gdb_remote::ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(), StringExtractor::GetStringRef(), Invalid, lldb_private::Communication::IsConnected(), LLDB_LOGV, m_echo_number, m_supports_qEcho, lldb_private::Communication::Read(), SendPacketNoLock(), and Success.

Referenced by lldb_private::process_gdb_remote::GDBRemoteCommunicationServer::GetPacketAndSendResponse(), lldb_private::process_gdb_remote::GDBRemoteCommunicationReplayServer::GetPacketAndSendResponse(), and ReadPacket().

Member Data Documentation

◆ m_compression_type

CompressionType lldb_private::process_gdb_remote::GDBRemoteCommunication::m_compression_type
protected

◆ m_echo_number

uint32_t lldb_private::process_gdb_remote::GDBRemoteCommunication::m_echo_number
protected

Definition at line 143 of file GDBRemoteCommunication.h.

Referenced by WaitForPacketNoLock().

◆ m_history

GDBRemoteCommunicationHistory lldb_private::process_gdb_remote::GDBRemoteCommunication::m_history
protected

◆ m_is_platform

bool lldb_private::process_gdb_remote::GDBRemoteCommunication::m_is_platform
protected

Definition at line 147 of file GDBRemoteCommunication.h.

◆ m_packet_timeout

std::chrono::seconds lldb_private::process_gdb_remote::GDBRemoteCommunication::m_packet_timeout
protected

Definition at line 142 of file GDBRemoteCommunication.h.

◆ m_send_acks

bool lldb_private::process_gdb_remote::GDBRemoteCommunication::m_send_acks
protected

◆ m_supports_qEcho

LazyBool lldb_private::process_gdb_remote::GDBRemoteCommunication::m_supports_qEcho
protected

The documentation for this class was generated from the following files: