add debugging protocol description draft
This commit is contained in:
parent
814f716ee5
commit
f1bb0e48fd
153
doc/specs/debugging_protocol.md
Normal file
153
doc/specs/debugging_protocol.md
Normal file
@ -0,0 +1,153 @@
|
||||
# VC-DBG protocol v1
|
||||
|
||||
## Notes
|
||||
|
||||
- '?' in name means that the attribute is optional.
|
||||
|
||||
## Connecting
|
||||
|
||||
### Step 1
|
||||
|
||||
Connection initiating with binary header exchange:
|
||||
|
||||
```
|
||||
'v' 'c' '-' 'd' 'b' 'g' NUL XX
|
||||
76 63 2D 64 62 67 00 XX
|
||||
```
|
||||
|
||||
XX - protocol version number
|
||||
|
||||
Client sends header to the server. Then server responds.
|
||||
Server closes connection after sending header if it mismatches.
|
||||
|
||||
### Step 2
|
||||
|
||||
Client sends 'connect' command.
|
||||
|
||||
## Messages
|
||||
|
||||
Message is:
|
||||
- 32 bit little-endian unsigned integer - number of encoded message bytes.
|
||||
- message itself (UTF-8 encoded json).
|
||||
|
||||
## Client-to-server
|
||||
|
||||
### Establishing connection
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "connect",
|
||||
"?disconnect-action": "resume|detach|terminate"
|
||||
}
|
||||
```
|
||||
|
||||
Configuring connection. Disconnect-action is action that debugged instance must perform on debugging client connection closed/refused.
|
||||
|
||||
- `resume` - Resume from pause mode and start listening for client.
|
||||
- `detach` - Resume from pause mode and stop server.
|
||||
- `terminate` - Stop the debugged application.
|
||||
|
||||
|
||||
### Specific action signals.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "pause|resume|terminate|detach"
|
||||
}
|
||||
```
|
||||
|
||||
### Breakpoints management
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "set-breakpoint|remove-breakpoint",
|
||||
"source": "entry_point:path",
|
||||
"line": 1
|
||||
}
|
||||
```
|
||||
|
||||
### Local value details request
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "get-value",
|
||||
"frame": 0,
|
||||
"local": 1,
|
||||
"path": ["path", "to", 1, "value"]
|
||||
}
|
||||
```
|
||||
|
||||
- `frame` - Call stack frame index (indexing from most recent call)
|
||||
- `local` - Local variable index (based on `paused` event stack trace)
|
||||
- `path` - Requsted value path segments. Example: `['a', 'b', 5]` is `local_variable.a.b[5]`
|
||||
|
||||
Responds with:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "value",
|
||||
"frame": 0,
|
||||
"local": 1,
|
||||
"path": ["path", "to", 1, "value"],
|
||||
"value": "value itself"
|
||||
}
|
||||
```
|
||||
|
||||
Example: actual value is table:
|
||||
```lua
|
||||
{a=5, b="test", 2={}}
|
||||
```
|
||||
|
||||
Then `value` is:
|
||||
```json
|
||||
{
|
||||
"a": {
|
||||
"type": "number",
|
||||
"short": "5"
|
||||
},
|
||||
"b": {
|
||||
"type": "string",
|
||||
"short": "test"
|
||||
},
|
||||
"1": {
|
||||
"type": "table",
|
||||
"short": "{...}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Server-to-client
|
||||
|
||||
### Response signals
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "success|resumed"
|
||||
}
|
||||
```
|
||||
|
||||
### Pause event
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "paused",
|
||||
"?reason": "breakpoint|exception|step",
|
||||
"?message": "...",
|
||||
"?stack": [
|
||||
{
|
||||
"?function": "function name",
|
||||
"source": "source name",
|
||||
"what": "what",
|
||||
"line": 1,
|
||||
"locals": [
|
||||
"name": {
|
||||
"type": "local type",
|
||||
"index": 1,
|
||||
"short": "short value",
|
||||
"size": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Loading…
x
Reference in New Issue
Block a user