Technology Readiness Level: TRL 0 (leaning tower of hacks)
This is a very early prototype of a debugger for lilos
, my async embedded
operating system. I'm publishing it despite its immaturity to attempt to push
the conversation forward on at-rest debugging of futures generated by async fn
.
This is built on top of my DWARF program analysis crate, debugdb
.
lilosdbg
supports lilos
0.3.x and 1.0.0 at this time.
lilosdbg
currently can't talk directly to your target over SWD, and instead
relies on a snapshot on disk. (This is deliberate; I want to make sure we can do
snapshot / postmortem debugging, so I'm making sure that use case works great
before attempting live debugging.)
Extract a memory snapshot of your running lilos
program into a file. Using
openocd
the command is (address and size for an STM32G030 shown, you will need
to adjust them):
dump_image memory-image.bin 0x20000000 8192
Alternatively, in GDB, the command would be
dump binary memory memory-image.bin 0x20000000 0x20002000
(If you don't have a lilos
program, you can also test using the files in the
demo
directory. There's an ELF file and a saved memory snapshot from one of my
programs.)
Now, run lildb
with the path to the ELF file for your lilos
program:
cargo run -q --bin lildb YOURPROJECT/target/thumbv6m-none-eabi/yourproject
(You'll need to change that path, in case that was unclear.)
At the lildb
prompt, load your memory image to the right address:
load memory-image.bin 0x20000000
Then try asking about the status of your tasks by running tasks
. Example
output from the demo image in this repo:
current tick-time is: 1620
task 0:
async fn keybad_fw::serial::task
suspended at src/serial.rs:35
waiting on: async fn lilos::spsc::{impl#4}::pop<keybad_fw::scanner::KeyEvent>
suspended at /home/cbiffle/proj/lilos/os/src/spsc.rs:313
waiting for data in spsc queue at 0x20001d7c
queue type: lilos::spsc::Queue<keybad_fw::scanner::KeyEvent> <.debug_info+0x0000e5b4>
task 1:
async fn keybad_fw::scanner::task
suspended at src/scanner.rs:134
waiting on: async fn lilos::exec::{impl#6}::next_time
suspended at /home/cbiffle/proj/lilos/os/src/exec.rs:965
waiting on: async fn lilos::exec::sleep_until
suspended at /home/cbiffle/proj/lilos/os/src/exec.rs:815
sleeping until: 1621 (1 ms from now)