mirror of
https://github.com/BrianPugh/gnwmanager.git
synced 2025-12-05 13:15:58 +01:00
60 lines
2.4 KiB
Markdown
60 lines
2.4 KiB
Markdown
# Stdout Monitoring
|
|
Printing to `stdout` is a common debugging technique to gain insight on the state of your program.
|
|
Unfortunately, due to the game & watch's hardware configuration, we don't have an independent communication channel for `stdout`.
|
|
We can get around this by rerouting `stdout` to a circular buffer on-device, and monitoring this region of memory for changes.
|
|
|
|
In your program's `main.c`, you will need code like:
|
|
|
|
```c
|
|
char logbuf[1024 * 4] __attribute__((aligned(4)));
|
|
volatile uint32_t log_idx;
|
|
|
|
int _write(int file, char *ptr, int len)
|
|
{
|
|
uint32_t idx = log_idx;
|
|
if (idx + len + 1 > sizeof(logbuf)) {
|
|
idx = 0;
|
|
}
|
|
|
|
memcpy(&logbuf[idx], ptr, len);
|
|
idx += len;
|
|
logbuf[idx] = '\0';
|
|
|
|
log_idx = idx;
|
|
|
|
return len;
|
|
}
|
|
```
|
|
|
|
The `game-and-watch-retro-go` repository already has this `_write` hook.
|
|
|
|
To read and print out this message buffer on your computer, run:
|
|
|
|
```bash
|
|
gnwmanager monitor
|
|
```
|
|
|
|
|
|
## Advanced Usage
|
|
Run `gnwmanager monitor --help` to view additional options.
|
|
|
|
```bash
|
|
$ gnwmanager monitor --help
|
|
|
|
Usage: gnwmanager monitor [OPTIONS]
|
|
|
|
Monitor the device's stdout logging buffer.
|
|
|
|
╭─ Options ────────────────────────────────────────────────────────────────────────────╮
|
|
│ --elf PATH Project's ELF file. Defaults to searching "build/" directory.│
|
|
│ --buffer TEXT Log buffer variable name. [default: logbuf] │
|
|
│ --index TEXT Log buffer index variable name. [default: log_idx] │
|
|
│ --help -h Show this message and exit. │
|
|
╰──────────────────────────────────────────────────────────────────────────────────────╯
|
|
```
|
|
|
|
`gnwmanager monitor` works by reading your projects ELF file, and searches for the defined variables `logbuf` and `log_idx`.
|
|
By default, GnWManager will search for and use the single ELF file in the `build/` directory.
|
|
If multiple ELF files are found, an explicit ELF file will need to be specified.
|
|
The `logbuf` and `log_idx` variable names can also be configured via `--buffer` and `--index`, respectively.
|