MI commands with --thread (--frame?) do not preserve user selected thread / frame

Jan Vrany <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
Hi, 

I was debugging a multithreaded program and realized that using --thread option to
verious MI command silently changes user selected thread - here's an example using
separate UI and CLI chahhel (tested on commit 6f5601c4d0)

Step 1: CLI info thread + info frame
====================================
--- CLI channel 
(gdb) info thread
  Id   Target Id                                           Frame 
* 1    Thread 0x7ffff7c30740 (LWP 10185) "user-selected-c" main () at /home/jv/Projects/gdb/origin_master/gdb/testsuite/gdb.mi/user-selected-context-sync.c
:60
  2    Thread 0x7ffff7c2f700 (LWP 10186) "user-selected-c" child_sub_function () at /home/jv/Projects/gdb/origin_master/gdb/testsuite/gdb.mi/user-selected-context-sync.c
:30
  3    Thread 0x7ffff742e700 (LWP 10187) "user-selected-c" futex_wait (private=0, expected=0, futex_word=0x555555558084 <barrier+4>) at ../sysdeps/unix/sysv/linux/futex-internal.h
:61
(gdb) info frame
Stack level 0, frame at 0x7fffffffdee0:
 rip = 0x555555555207 in main (/home/jv/Projects/gdb/origin_master/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60); saved rip = 0x7ffff7c5709b
 source language c.
 Arglist at 0x7fffffffded0, args: 
 Locals at 0x7fffffffded0, Previous frame's sp is 0x7fffffffdee0
 Saved registers:
  rbp at 0x7fffffffded0, rip at 0x7fffffffded8

--- MI channel 
 <no input no output>



Step 2: MI -stack-info-depth --thread 3
=======================================
-- CLI channel
 <no input no output>

--- MI channel
(gdb) 
-stack-info-depth --thread 3
^done,depth="6"
(gdb)




Step 3:  CLI info thread + info frame (same as in Step 1)
=========================================================
-- CLI channel
(gdb) info thread
  Id   Target Id                                           Frame 
  1    Thread 0x7ffff7c30740 (LWP 10185) "user-selected-c" main () at /home/jv/Projects/gdb/origin_master/gdb/testsuite/gdb.mi/user-selected-context-sync.c
:60
  2    Thread 0x7ffff7c2f700 (LWP 10186) "user-selected-c" child_sub_function () at /home/jv/Projects/gdb/origin_master/gdb/testsuite/gdb.mi/user-selected-context-sync.c
:30
* 3    Thread 0x7ffff742e700 (LWP 10187) "user-selected-c" futex_wait (private=0, expected=0, futex_word=0x555555558084 <barrier+4>) at ../sysdeps/unix/sysv/linux/futex-internal.h
:61
(gdb) info frame
Stack level 0, frame at 0x7ffff742dee0:
 rip = 0x7ffff7f8612e in futex_wait (../sysdeps/unix/sysv/linux/futex-internal.h:61); saved rip = 0x555555555183
 inlined into frame 1
 source language c.
 Arglist at unknown address.
 Locals at unknown address, Previous frame's sp in rsp
(gdb)   

--- MI channel 
 <no input no output>



As you can see, there was no `frame`, `thread`, `-select-frame` or `-thread-select` command between
first and second info thread / frame commands on CLI, yet the selected thread / frame changed (silently).

Is this intended behavior? If so what's the rationale?

Thanks! 

Jan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.