|
|
|
|
# Debugging Panda Safety with Replay Drive + LLDB
|
|
|
|
|
|
|
|
|
|
By default, `libsafety.so` is built with optimizations and stripped symbols, which makes C-level debugging impractical.
|
|
|
|
|
This workflow fixes that by:
|
|
|
|
|
|
|
|
|
|
1. Building `libsafety` with debug symbols and no optimizations.
|
|
|
|
|
2. Running `replay_drive.py` with a user-provided route.
|
|
|
|
|
3. Attaching LLDB automatically from VS Code.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Building with Debug Symbols
|
|
|
|
|
|
|
|
|
|
Rebuild `libsafety` with the `--unoptimized` flag:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scons -u -j$(nproc) --unoptimized
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This enables the debug flags:
|
|
|
|
|
|
|
|
|
|
* `-g` (include symbols)
|
|
|
|
|
* `-O0` (disable optimizations)
|
|
|
|
|
* `-fno-omit-frame-pointer` (keep stack traces usable)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Debugging Workflow
|
|
|
|
|
|
|
|
|
|
1. **Build with debug symbols**
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scons -u -j$(nproc) --unoptimized
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
2. **Start the debugger in VS Code**
|
|
|
|
|
|
|
|
|
|
* Select **Replay drive + Safety LLDB**.
|
|
|
|
|
* Enter the route or segment when prompted.
|
|
|
|
|
|
|
|
|
|
3. **Attach LLDB**
|
|
|
|
|
|
|
|
|
|
* When prompted, pick the running **`replay_drive` process**.
|
|
|
|
|
* ⚠️ Attach quickly, or `replay_drive` will start consuming messages.
|
|
|
|
|
|
|
|
|
|
✅ Tip: Add a Python breakpoint at the start of `replay_drive.py` to pause execution and give yourself time to attach LLDB.
|
|
|
|
|
|
|
|
|
|
4. **Set breakpoints in VS Code**
|
|
|
|
|
Breakpoints can be set directly in `libsafety.c` (or any C file).
|
|
|
|
|
No extra LLDB commands are required — just place breakpoints in the editor.
|
|
|
|
|
|
|
|
|
|
5. **Resume execution**
|
|
|
|
|
Once attached, you can step through both Python and C safety code as CAN logs are replayed.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Notes
|
|
|
|
|
|
|
|
|
|
* Always rebuild with `--unoptimized` before debugging.
|
|
|
|
|
* Use short routes for quicker iteration.
|
|
|
|
|
* Pause `replay_drive` early to avoid wasting log messages.
|
|
|
|
|
|
|
|
|
|
### Video
|
|
|
|
|
|
|
|
|
|
[demo safety debug.mp4](assets/demo%20safety%20debug.mp4)
|