Files
marte-debug/TUTORIAL.md
T
2026-05-07 10:49:24 +02:00

220 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tutorial: Observability and Debugging with the MARTe2 Debug Suite
This guide covers both transport options. Choose the one that fits your workflow:
| | `WebDebugService` | `DebugService` |
|---|---|---|
| **Client** | Any web browser | Rust native GUI |
| **Setup** | Config only | Config + `cargo run` |
| **Best for** | Quick inspection, remote access | High-performance plots, scripted tooling |
---
## Part A — Web UI (`WebDebugService`)
### A.1 Environment Setup
```bash
cd /path/to/your/marte2/project
source /path/to/marte_debug/env.sh
```
### A.2 Add `WebDebugService` to Your Config
Add the service as a **sibling** of the `+App` node (not inside it):
```text
+WebDebugService = {
Class = WebDebugService
HttpPort = 8090
}
+App = {
Class = RealTimeApplication
...
}
```
Restart your application. You should see:
```
[WebDebugService] HTTP server listening on port 8090
```
### A.3 Open the Web UI
Navigate to `http://localhost:8090` in any browser. The UI connects automatically via SSE.
---
### A.4 Exploring the Object Tree
The **Application Tree** panel on the left mirrors your live ORD hierarchy.
1. Expand `Root → App → Data` to find data sources.
2. Click **Info** next to any node to see its class, config, and signals in the details panel.
3. Click **List** to expand just the immediate children without recursing.
---
### A.5 Real-Time Signal Tracing
1. Locate a signal in the tree, e.g. `Root.App.Data.Timer.Counter`.
2. Click **Trace** next to the signal. The signal appears in the **Traced Signals** list with
its live last value.
3. Click **Plot** to open it in the real-time Chart.js graph. Use the **Follow** toggle to
keep the time axis scrolling.
4. To set the sampling decimation (e.g. every 10th sample), use the command box at the bottom
of the page:
```
TRACE App.Data.Timer.Counter 1 10
```
5. Click **Trace** again (or send `TRACE … 0`) to stop.
---
### A.6 Signal Forcing
1. Find a GAM output signal, e.g. `Root.App.Data.DDB.Counter`.
2. Click **Force**. A modal dialog appears.
3. Enter a value (e.g. `9999`) and click **Apply**.
4. The signal is locked at that value every RT cycle.
5. Click **Unforce** (or use the **Active Controls** panel) to release.
---
### A.7 Breakpoints
1. Click **Break** next to a signal.
2. Select an operator (`>`, `<`, `==`, etc.) and enter a threshold.
3. When the condition fires, the application pauses automatically. The status bar shows
**PAUSED** and the GAM name where execution stopped.
4. Use **Step** to advance one cycle at a time, or **Resume** to continue.
5. Click **Break OFF** to clear the breakpoint.
---
### A.8 Execution Stepping
While paused (after a breakpoint or manual **Pause**):
1. Enter a step count in the **Step** box (e.g. `5`) and click **Step**.
2. The RT loop runs exactly 5 output-broker cycles, then pauses again.
3. The status SSE event (`{"type":"status","remaining":…}`) keeps the UI updated.
---
### A.9 Signal Monitoring
Monitoring polls a signal at a slow rate without using the RT trace path — useful for
`DataSourceI` signals not connected to any GAM.
1. Click **Monitor** next to a signal.
2. Enter a poll period in milliseconds (e.g. `500`).
3. The signal's current value arrives via SSE every 500 ms as a `{"type":"monitor",…}` event.
---
### A.10 Log Viewer
The **Logs** panel at the bottom shows every `REPORT_ERROR` call forwarded as SSE events.
Use the level buttons (D / I / W / E) to filter by severity, or type a keyword to search.
---
## Part B — Rust Native GUI (`DebugService`)
### B.1 Environment Setup
```bash
source /path/to/marte_debug/env.sh
```
### B.2 Add `DebugService` to Your Config
```text
+DebugService = {
Class = DebugService
ControlPort = 8080
UdpPort = 8081
LogPort = 8082
}
+App = {
Class = RealTimeApplication
...
}
```
### B.3 Start the GUI Client
```bash
cd Tools/gui_client
cargo run --release
```
The GUI connects to `localhost:8080` automatically and requests the tree on startup.
---
### B.4 Exploring the Object Tree
The **Application Tree** panel on the left shows the live ORD.
1. Expand `Root → App → Data`.
2. Click ** Info** next to any node to see its JSON config in the bottom-left pane.
---
### B.5 Real-Time Signal Tracing (Oscilloscope)
1. Locate `Root.App.Data.Timer.Counter`.
2. Click **📈 Trace**. The **Oscilloscope** panel begins plotting.
3. The **UDP Packets** counter in the top bar increments — confirming high-speed telemetry
on port 8081.
4. Drag additional signals from the **Traced Signals** list into the oscilloscope panel for
multi-signal overlay.
---
### B.6 Signal Forcing
1. Find `Root.App.Data.DDB.Counter`.
2. Click **⚡ Force**.
3. Enter a value (e.g. `9999`) and click **Apply Force**.
4. The oscilloscope plot immediately jumps to and holds at `9999`.
5. Click **❌** in the **Active Controls** panel to release the force.
---
### B.7 Global Pause and Resume
- Click **⏸ Pause** in the top bar to halt all RT threads.
- Click **▶ Resume** to continue.
---
### B.8 Log Terminal
The bottom panel shows all `REPORT_ERROR` events forwarded from `TcpLogger` (port 8082).
- **Regex Filter:** Type a keyword (e.g. `Timer`) to isolate events.
- **⏸ Pause Logs:** Stop scrolling while continuing to capture.
---
## Part C — Scripted / Programmatic Access
Both transports accept plain text commands. You can use `nc` or any TCP client:
```bash
# DebugService
echo -e "DISCOVER\nTRACE App.Data.DDB.Counter 1" | nc localhost 8080
# WebDebugService
curl -s -X POST http://localhost:8090/api/command \
-H "Content-Type: text/plain" \
-d "DISCOVER"
```
For the full command reference see [API.md](API.md).