Re: python API to trigger a "select-frame" like event with a given location

Simon Sobisch via Gdb <[email protected]> Tue, 30 Sep 2025 18:41:32 +0200
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
Am 30.09.2025 um 17:30 schrieb Andrew Burgess:
> Simon Sobisch via Gdb <[email protected]> writes:
> 
>> using a frame filter and decorator I can drop "not interesting" frames
>> and add "artificial - display only" ones:
>>
>>
>> Instead of
>>
>> (gdb) backtrace
>>
>> #0  PROG2_ (...) at copybook.cpy:14
>> #1  PROG2 (...) at progb.cob:127
>> #2  PROG1_ (...) at init.cpy:21
>> #3  PROG1 (...) at prog.cob:139
>> #4  main  (...) at prog.c:23223
>>
>> I can show (combined with
>>
>> (gdb) mybacktrace
>>
>> #0  PROG2_ (...) at copybook.cpy:14
>> #0.0  COPYFUNC SECTION at copybook.cpy:14
>> #0.1  PROGFIN SECTION at progb.cob:521
>> #0.2  PROGMAIN SECTION at progb.cob:195
>> #0.3  PROG2 at progb.cob:127
>> #2  PROG1_ (...) at init.cpy:21
>> #2.0  PROG-INIT-EXT SECTION at init.cpy:21
>> #2.1  PROG-INIT SECTION at init.cpy:41
>> #2.2  MAIN-000 SECTION at proga.cob:139
>> #2.3  PROG1 at proga.cob:139
>>
>>
>> Also there's the option to add myup and mydown commands which select the
>> "expected" frame (0 and 2, in this example) where all the relevant
>> variables are defined.
>>
>>
>> But currently I see no way to programmatically "select" by location
>> (frame + linespec/LOCATION) [which would, other than "list" also be
>> passed to UIs/MI).
>>
>> Is there an option that I've overlooked?
>>
>>
>> If not: could there be an extension to "select-frame level"
>>
>> select-frame level LOCATION
>>
>> select-frame level -- Select a stack frame by level and show LOCATION in
>>                         the UI
>>
>> or a new command
>>
>> show-location LOCATION
>>
>> that executes what select-frame does, but _without_ selecting anything
>> (calling interps_notify() with the location as "selection")?
> 
> If I understand what you need, then you are looking for way to implement
> your 'myup' and 'mydown' commands such that GDB will appear to move
> though the artificial frames (e.g. 0.0, 0.1, 0.2, 0.3, etc).  To do this
> you need to select the real frame (#0), but then want some way such that
> GDB will notify the various UI's to indicate that their focus should
> shift to the source locations corresponding to the artificial frames,
> right?

Exactly

> You mention, but seem to dismiss, using 'list'.  Can you expand on why
> this doesn't meet your needs?

Because "list" sends no events, so registered mi clients (Emacs, vim, 
fancy-ide-of-your-choice) have no info on that.

> Which UIs in particular is it that you are interested in seeing update?
> I ask because I'm wondering which events it is that would need to be
> emitted.  Could you expand with some user stories, which UI is the user
> looking at, what actions do they perform, and what is updated as a
> consequence.

Likely "list" will also not apply to TUI's assembly window, which 
handles "up" and "down" just fine - so that would be another one.

> Thanks,
> Andrew

Thanks for taking the time to read and answer in the first place!
Simon