Repository navigation
Releases: flespark/gdr
Releases · flespark/gdr
Release list
GDR 2026.04
Added
gdr probe [--json]reports which adapter a target matches with the evidence
behind the claim (matched symbols, version source, layout fingerprint) and a
confidence ofexact,rangeorundetected;gdr init <rtos> autouses it
only when a single exact answer exists.$gdr_jsonnow 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-heapdrops 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 initrefuses 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-unverifiedoverrides 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 recordspresent/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-parsingN/A/0xstrings.gdr api capabilitiesreports each
kind's columns and the configuration that would enable a missing one, and
gdr api checkreports the system verdicts as structured findings. - Detail blocks carry a
sectionsview of their consistency verdicts with
per-rowok/fail/skippedseverity; the flat text output is unchanged. gdr resetandgdr init --forcereplace 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_chunkreturn it through GDB
evaluate, with a chunked fallback for payloads larger than one result.
gdr init --jsonreports 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/skippedverdicts and object addresses; unavailable fields report the
missing symbol, field or config macro instead of guessing.gdr api checknow
covers the RT-Thread system verdicts as well as the heap ones.- The check command is singular everywhere:
frt checksis nowfrt checkand
gdr api checksis nowgdr api check(both old spellings stay as aliases). - The
rtt timerstable gains aSrccolumn 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> unwatchdrops them and bare<rtos> watchlists the
set. Like GDBdisplay, not a watchpoint: it never stops the target. Watches
are session state dropped bygdr reset.- Singular object details accept a name, an explicit address or a symbol:
<rtos> <object> <name-or-address>(and thedetailAPI 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 theirAddrcolumn.
Changed
gdr init --jsonreportsverifiedandmarkers, adds awarningwhen the
target could not confirm the adapter, and reports refusals as a coded
errorobject (the same shape the API envelope uses) instead of a bare
message string.- FreeRTOS
HighWaternow 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
Bsuffix,
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 fromrtt systemand the panel. rtt heapdrops 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 checkstays.- A new
PCcolumn afterBasePrioshows the thread's last PC, proven from
its saved switch frame orN/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, soHeapAccountingno longer reports a false mismatch.
rtt heapHoles 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.pyat 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 statereads the scheduler lock and interrupt nest
counters:Unlocked,Locked (nest N), orIn ISR (nest N). It was always
N/A; the row is omitted when no counter can be read.
GDR 2026.03
Added
- Git-style structured help trees for
gdr,rttandfrt: every list,
detail and heap topic documents output fields, usage tips, configuration
dependencies and implementation limits; convenience functions and active
layout-derived pretty-printers are also discoverable. The same dataclasses
render terminal help and MkDocs-ready Markdown. - FreeRTOS object support: six-channel object discovery (registry, symbol,
active timer lists, MPU pool, waiter, user) with provenance (Srccells),
per-kind list tables and singular details for queues, semaphores, mutexes,
timers, event groups and stream buffers;frt objectsshows a
Kind/Count/Sourcessummary. - FreeRTOS
frt heaprenders the real heap snapshot: algorithm
(heap_1..heap_5 plus heap_3/none), kernel counters, protector canary
decode, free-list and linear walks with a three-wayCrossCheckverdict.
frt systemreportsHeap used/total/status. - RT-Thread
rtt objectscommand (registry-backed Kind/Count summary),
symmetric withfrt objects. - Kinds without a value now render
N/Auniformly (was a mix ofN/Aand
unavailable); a verdict with a reason keeps theunavailable:prefix.
Changed
heapandobjectsrender through the neutralgdr.commandsrenderers
(HeapReport+object_summary_tableadapter protocol), sorttand
frtshare one code path and cannot drift.- FreeRTOS kernel ABI names (struct member paths, globals, kinds) are
consolidated intofreertos/layout.pywithsymbols/kind tables;
consumers read through the layout, never rawread_pathtuples. - Repetitive adapter helpers moved into
gdr/(arch_or_default,
value_at,read_field_at,loadable_ranges, command completion), and
the FreeRTOStimers ↔ detailsimport cycle was removed. - Fixture builders share
ci/freertos/fixture-common.shand
fixture/common/sources; the three FreeRTOS CI lanes and the local
ci/validate-podman.shreproducer now stay in sync.
Fixed
gdr initno longer kills the GDB session on policy failures (unknown
RTOS name, invalid or unsupported version, declared/target version
mismatch): it warns and returns to the prompt with no adapter registered.rttandfrtheap/system output uses a singleN/Asentinel; a bare
unavailablecell is rejected by a boundary test.
GDR 2026.02
Added
- Added RTOS-neutral
$gdr_task,$gdr_tasks, and$gdr_objectfunctions,
plus adapter-owned task/object tables and a unified command router. - Added RT-Thread detail commands for tasks, timers, IPC, and memory pools,
including bounded waiter, capacity, policy, expiry, and consistency data. - Added width-aware table rendering, target-symbolized function pointers, and
a profile-driven QEMU/GDB harness with persistent sessions and diagnostics. - Added RT-Thread heap command for heap info collection and diagnostic (heap
algorithm, used size, total size, owner, corrupt check, memory bubble state).
Changed
- Release archives now contain both RT-Thread and FreeRTOS adapters in one
gdrasset. Thegdrcommand is limited to initialization and help; RTOS
commands remain underrttandfrt. - Task and IPC tables expose capability-aware columns such as
BasePrio,
Addr,CPU,Bind, waiter lists,Free,Used, andExpiresIn. - Table widths shrink only marked text columns and preserve the complete
column set across terminal sizes.
Fixed
- Completed RT-Thread routing and object tables for events, mailboxes, message
queues, and memory pools. - Fixed SMP CPU-0 reporting and retained detail diagnostics when raw fields or
waiters are unavailable; unsupported values now render explicitly asN/A.
GDR 2026.01
Added
- RT-Thread 3.1.x and 4.x support, with layout and kernel configuration
probing for SMP, heap managers, and IPC components. - GDB aggregate commands, pretty-printers, and convenience functions for
RT-Thread objects. - Closed-loop QEMU verification for Cortex-A9 and RISC-V RV64 targets.
Changed
- Function-pointer columns in
rtthread threadsandrtthread timersnow
resolve target symbols while preserving a hexadecimal address fallback. - GDB command registration and table output now provide clearer diagnostics
for malformed target data and unavailable symbols.