A DESCRIPTION OF THE REQUEST :
I propose extending the provided JDWP transports with the ability to request (via event requests) that payload information be eagerly transferred to the debugger. This should include, at a minimum, information such as strings for names of classes, methods, signature, fields, and references to related payload information such as field or "this" object references. The exact support would vary depending on the event request type, and can be more carefully enumerated in subsequent discussion if this RFE is pursued.
JUSTIFICATION :
Events are rarely consumed without some interest from the debugger in their payload. Unfortunately, tracing of the JDWP packet communications indicates that virtually no information is transferred to the debugger at the time of event dispatch other than the event type. Debugger applications must then issues series of requests to obtain various payload information associated with events, which in turn generates a flurry of small packets on the JDWP transport. This is very inefficient, as the (apparently) synchronous nature of the transport incurs expensive IPC costs for every request for information in a machine-local debugging context, and even higher costs in remote debugging contexts that experience network latency and congestion. The problem is most detrimental to debugger applications that may consume many (or all) events in an automated fashion to accomplish analysis tasks.
Logically, for many event requests, a typical debugger application will know a-priori what types of payload information it will always be interested in for various events. Indicating this at the outset would provide opportunities for vastly improved efficiency by enabling the debuggee VM to accumulate this information for efficient transport to the debugger.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Event requests that provide an API to request eager transfer of payload information associated with the events from the debuggee VM to the debugger. Enhancements to the JDWP protocol to support efficient packaging of eagerly transferred payload information.
ACTUAL -
All requests for additional information about event payloads trigger indepent request/response communications, generating many small inefficient packets and incurring high inter-VM IPC and/or network latency/congestion costs.
I propose extending the provided JDWP transports with the ability to request (via event requests) that payload information be eagerly transferred to the debugger. This should include, at a minimum, information such as strings for names of classes, methods, signature, fields, and references to related payload information such as field or "this" object references. The exact support would vary depending on the event request type, and can be more carefully enumerated in subsequent discussion if this RFE is pursued.
JUSTIFICATION :
Events are rarely consumed without some interest from the debugger in their payload. Unfortunately, tracing of the JDWP packet communications indicates that virtually no information is transferred to the debugger at the time of event dispatch other than the event type. Debugger applications must then issues series of requests to obtain various payload information associated with events, which in turn generates a flurry of small packets on the JDWP transport. This is very inefficient, as the (apparently) synchronous nature of the transport incurs expensive IPC costs for every request for information in a machine-local debugging context, and even higher costs in remote debugging contexts that experience network latency and congestion. The problem is most detrimental to debugger applications that may consume many (or all) events in an automated fashion to accomplish analysis tasks.
Logically, for many event requests, a typical debugger application will know a-priori what types of payload information it will always be interested in for various events. Indicating this at the outset would provide opportunities for vastly improved efficiency by enabling the debuggee VM to accumulate this information for efficient transport to the debugger.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Event requests that provide an API to request eager transfer of payload information associated with the events from the debuggee VM to the debugger. Enhancements to the JDWP protocol to support efficient packaging of eagerly transferred payload information.
ACTUAL -
All requests for additional information about event payloads trigger indepent request/response communications, generating many small inefficient packets and incurring high inter-VM IPC and/or network latency/congestion costs.