Packet Acknowledgment (Debugging with GDB)
E.11 Packet Acknowledgment
By default, when either the host or the target machine receives a packet, the first response expected is an acknowledgment: either ‘
+’ (to indicate the package was received correctly) or ‘
-’ (to request retransmission). This mechanism allows the GDB remote protocol to operate over unreliable transport mechanisms, such as a serial line.
In cases where the transport mechanism is itself reliable (such as a pipe or TCP connection), the ‘
-’ acknowledgments are redundant. It may be desirable to disable them in that case to reduce communication overhead, or for other reasons. This can be accomplished by means of the ‘
QStartNoAckMode’ packet; see QStartNoAckMode.
When in no-acknowledgment mode, neither the stub nor GDB shall send or expect ‘
-’ protocol acknowledgments. The packet and response format still includes the normal checksum, as described in Overview, but the checksum may be ignored by the receiver.
If the stub supports ‘
QStartNoAckMode’ and prefers to operate in no-acknowledgment mode, it should report that to GDB by including ‘
QStartNoAckMode+’ in its response to ‘
qSupported’; see qSupported. If GDB also supports ‘
QStartNoAckMode’ and it has not been disabled via the
set remote noack-packet off command (see Remote Configuration), GDB may then send a ‘
QStartNoAckMode’ packet to the stub. Only then may the stub actually turn off packet acknowledgments. GDB sends a final ‘
+’ acknowledgment of the stub’s ‘
OK’ response, which can be safely ignored by the stub.
set remote noack-packet command only affects negotiation between GDB and the stub when subsequent connections are made; it does not affect the protocol acknowledgment state for any current connection. Since ‘
-’ acknowledgments are enabled by default when a new connection is established, there is also no protocol request to re-enable the acknowledgments for the current connection, once disabled.