You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
gdr probe [--json] reports which adapter a target matches with the evidence
behind the claim (matched symbols, version source, layout fingerprint) and a
confidence of exact, range or undetected; gdr init <rtos> auto uses it
only when a single exact answer exists. $gdr_json now exists from source gdr.py, so a client can ask before initializing.
A VSCode extension under vscode/ consumes the JSON API: it loads GDR into
the session's own GDB, probes the target, initializes the adapter the user
confirms, and states precisely why a session cannot host GDR.
gdr api snapshot --no-heap drops the heap walk from a snapshot, so a
client's stop-time refresh can skip the only full-memory traversal among the
panel verbs.
gdr init refuses to register an adapter when the target matches no RTOS
symbol, instead of answering every later read with empty tables; gdr init <rtos> <version> --allow-unverified overrides that for a kernel
whose symbols were deliberately modified or stripped. An unverified
registration is recorded on the session and repeated in every API envelope's warnings, so a client shows the caveat rather than trusting the reads.
The extension gains an RTOS panel in the bottom panel area (one tab per debug
session): task/object/heap/check cards rendered from the snapshot envelope,
stop-driven refresh with a generation guard, configurable heap collection
(gdr.refreshHeaps), JSON snapshot recording for bug reports
(gdr.recordSnapshotsDir), a transport choice for very large payloads
(gdr.snapshotTransport), and address navigation into the mcu-debug memory
viewer.
The extension checks GDB's Python at launch instead of at the first stop: a
generated loader file records present/absent, so a GDB built without
Python no longer aborts the debug launch, and the panel names the -py3
binary to use instead.
Typed presentation contract for tooling: every list table declares its
columns (ColumnSpec), carries machine values beside the rendered text and
names its identity column, so a client can sort, right-align and key rows
without re-parsing N/A/0x strings. gdr api capabilities reports each
kind's columns and the configuration that would enable a missing one, and gdr api check reports the system verdicts as structured findings.
Detail blocks carry a sections view of their consistency verdicts with
per-row ok/fail/skipped severity; the flat text output is unchanged.
gdr reset and gdr init --force replace the active adapter without
restarting GDB, so switching target or version no longer costs a session.
A versioned JSON API for tooling (the IDE plugin): gdr api <verb> prints
one envelope and $gdr_json / $gdr_json_chunk return it through GDB
evaluate, with a chunked fallback for payloads larger than one result. gdr init --json reports the init outcome as one structured line.
<rtos> heap dump [path] draws the heap occupancy bitmap: grey for free
blocks and one colour per owner. Inline in iTerm2 or Kitty; otherwise a PNG
(gdr-heap-<rtos>-gen<N>.png). The panel's heap card draws the same map with a
hover readout.
rtt check [scope] [target] runs explicit consistency checks (thread stack/priority,
timer flag-vs-list membership, current-thread/tick/registry types, heap chain) with ok/fail/skipped verdicts and object addresses; unavailable fields report the
missing symbol, field or config macro instead of guessing. gdr api check now
covers the RT-Thread system verdicts as well as the heap ones.
The check command is singular everywhere: frt checks is now frt check and gdr api checks is now gdr api check (both old spellings stay as aliases).
The rtt timers table gains a Src column recording registry and/or active-list
evidence per timer, so a dormant timer and a detached-but-linked one are told apart.
<rtos> watch [<kind> | <object> <target>] prints watched kinds (list table)
or singletons (detail block) on every target stop, reusing the same collectors
as the commands; <rtos> unwatch drops them and bare <rtos> watch lists the
set. Like GDB display, not a watchpoint: it never stops the target. Watches
are session state dropped by gdr reset.
Singular object details accept a name, an explicit address or a symbol: <rtos> <object> <name-or-address> (and the detail API verb plus $gdr_task/$gdr_object) resolve a name first, then match an address
literal or symbol against live objects, so duplicate-named or nameless
objects stay reachable by their Addr column.
Changed
gdr init --json reports verified and markers, adds a warning when the
target could not confirm the adapter, and reports refusals as a coded error object (the same shape the API envelope uses) instead of a bare
message string.
FreeRTOS HighWater now matches RT-Thread's historical maximum used bytes,
not remaining bytes; unavailable without retained stack bounds and prefill.
FreeRTOS normal views show concrete check problems instead of verified/n/a
counts; frt check [scope] [name] exposes all verdicts with object addresses.
Memory sizes are unified to bytes: key/value sizes print with a B suffix,
and table columns state bytes in their descriptions rather than in headers.
The panel's system summary is one header row and one value row, the task
table's shape. Kernel version is gone from rtt system and the panel.
rtt heap drops the Holes line and the per-thread occupancy table; its
verdicts move into the table as diagnostic columns. The Checks card is gone
from the panel. gdr api check stays.
A new PC column after BasePrio shows the thread's last PC, proven from
its saved switch frame or N/A.
Fixed
FreeRTOS stack size/usage include the final recorded StackType_t; HighWater
includes saved-SP reservations so it never falls below Used, even when initial
context slots retain their fill bytes.
Redundant RT-Thread object Type and timer KernelTick columns are omitted from
merged tables; meaningful timer classes and FreeRTOS subtypes remain available.
Snapshots taken at an RT-Thread reset-vector stop no longer fail on NULL
timer-list links; startup lists stop safely instead of producing fake objects
at wrapped addresses. Normal collection works after kernel startup.
Heap maps preserve every block at a minimum of 6×6 pixels without trailing
background; exported PNGs include owner/free colour legends and byte totals.
RT-Thread heap walk counts used blocks by their full span, matching the
kernel counters, so HeapAccounting no longer reports a false mismatch. rtt heap Holes states its sizes in bytes; the panel's heap table is titled
by what it lists ("Heap used by thread" or "Free list").
The VSCode extension checks Python before source gdr.py at launch. Without
Python the session still starts and the panel shows why. The first stop does
not check Python or source again. The source path is unquoted so GDB 16
accepts it.
Version detection reads a kernel's version macros from the loaded image's
debug strings instead of GDB's compilation-unit scope, so it keeps working when
the build tree is gone (a flashed release image) or when the halted PC sits in
a unit that has not included the version header yet.
RT-Thread Scheduler state reads the scheduler lock and interrupt nest
counters: Unlocked, Locked (nest N), or In ISR (nest N). It was always N/A; the row is omitted when no counter can be read.