unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
@ 2009-03-03 10:52 Miles Bader
  2009-03-08  2:06 ` Nick Roberts
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Miles Bader @ 2009-03-03 10:52 UTC (permalink / raw)
  To: emacs-pretest-bug

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:


This is an old bug with gdb-ui that seems to have been forgotten (but is
still present though; it bites me regularly); the basic symptom is that
sometimes when you type a command to a gud debugger prompt, and gud pops
up an associated source code buffer, the source code buffer will be
displayed in the same window where your gud session buffer was displayed,
resulting in the gud buffer being hidden!


Here's the test case I gave (starting with emacs -Q):

     (1) start a gdb session in emacs, and hit a breakpoint or something so
         that gdb pops up the source in another window (splitting the frame)

     (2) Switch to the source window with "C-x o"

     (3) Delete the other [*gud...*] window with "C-x 1"

     (4) Switch back to the *gud...* buffer using "C-x b *gud...* RET"

     (5) Try to pop up the source buffer again using a gdb command, e.g.,
         just "frame RET".

   *bang*, *gdb...* buffer disappears, source buffer is only ting
   displayed... :-(

That text is from an old emacs-devel thread (Message-Id is
<buoy74c7sjh.fsf@dhapc248.dev.necel.com>).

Here is the text of some of the subsequent messages in that thread:


  > From: Nick Roberts <nickrob@snap.net.nz>

    OK.  When you do (4) you put the GUD buffer in the window that
    gdb-source-window points to.  So when you do 'f' gdb-ui thinks the
    source should go there.

    I'm not sure what I can do as commands like switch-to-buffer are
    built-in.  Maybe some kind of hook in window-size-change-functions
    to keep gdb-ui up-to-date.  Or perhaps having window groups would
    make it impossible to switch the source buffer for the GUD buffer if
    they were assigned to different groups.


  > From: Miles Bader <miles@gnu.org>

    gud/gdb-ui shouldn't be storing window references like that and
    assuming the associated buffer hasn't been changed by the user,
    because that's an assumption that doesn't hold in emacs.

    Perhaps that code is left over from the "old" gdb-ui which used
    dedicated windows?

    A possible fix would be to store the buffer gdb puts in that window,
    and when deciding whether to re-use that window or, also verify that
    the same buffer is there (and don't re-use the window if not).


  > From: Nick Roberts <nickrob@snap.net.nz>

    gdb-ui _does_ store the (source) buffer it puts in the window.
    That's why when you replace it with the GUD buffer using
    switch-to-buffer (not part of gdb-ui) it gets confused.

    It could verify that the same buffer is there but the contents of
    the source window change every time the program being debugged stops
    in a frame that is in a different file and gdb-ui must allow for
    this.  If the current window shows the previous frame and execution
    is continued (from the tool bar, say) so that it stops in another
    frame in a different file, then it's probably appropriate to replace
    the entire window with one displaying the new file.

    I'm not saying it that can't be done but it's probably more
    productive to discuss these ideas with actual code.


  > From: Miles Bader <miles@gnu.org>

    > It could verify that the same buffer is there but the contents of
    > the source window change every time the program being debugged
    > stops in a frame that is in a different file and gdb-ui must allow
    > for this.

    Why is this a problem?  In such cases, the source buffer should get
    changed via gdb-display-source-buffer, which will update the
    associated source-file, right?

    In other words, it seems that as long as gud is the one doing the
    updating of the source window, everything will remain consistent,
    and it will keep using that window.  It would only be if some
    external agent changes what's displayed in that window that the
    state would become inconsistent -- and in that case, it's probably
    the right thing to do to pop up a new window (which will become the
    new source window).

    Anyway, I can make the obvious change and see if it feels funny.


  > From: Nick Roberts <nickrob@snap.net.nz>

    > Why is this a problem?  In such cases, the source buffer should
    > get changed via gdb-display-source-buffer, which will update the
    > associated source-file, right?

    It needs to distinguish between cases when it is appropriate to
    replace the entire window with one displaying the new file, as
    described previously and when it isn't, as in your example.

    > Anyway, I can make the obvious change and see if it feels funny.

    Sure.  If there are problems it can easily be reverted.  It might be
    a good idea to start by not making the windows dedicated then
    perhaps David Hansen can say if that cures his use case.


  > From: Miles Bader <miles@gnu.org>

    > Sure.  If there are problems it can easily be reverted.  It might
    > be a good idea to start by not making the windows dedicated then
    > perhaps David Hansen can say if that cures his use case.

    At least in my case, the windows _aren't_ dedicated.

    I'm not using the 57-window gdb-ui variant, I'm just using M-x gdb RET.

    [That's may be part of what's going on actually -- the current
    mechanism feels like it was written expecting the windows to be
    dedicated.]






If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/local/share/emacs/23.0.91/etc/DEBUG for instructions.


In GNU Emacs 23.0.91.7 (x86_64-unknown-linux-gnu, GTK+ Version 2.14.7)
 of 2009-03-03 on dhlpc061
Windowing system distributor `The X.Org Foundation', version 11.0.10503000
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: ja_JP.UTF-8
  value of $XMODIFIERS: @im=SCIM
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t

Major mode: Article

Minor modes in effect:
  shell-dirtrack-mode: t
  buffer-face-mode: t
  show-paren-mode: t
  recentf-mode: t
  rcirc-track-minor-mode: t
  minibuffer-electric-default-mode: t
  display-time-mode: t
  desktop-save-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  temp-buffer-resize-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-n C-n C-n C-n C-n C-n C-u C-p C-u C-p C-p 
C-p C-u C-p C-u C-p C-p C-u C-p C-u C-p C-u C-p C-u 
C-p C-u C-p C-u C-p C-n C-n SPC n n SPC n n n q C-p 
c y c y C-u C-p C-u C-p C-v C-n C-n C-n C-n C-n C-n 
C-n C-x b * g u SPC <return> C-x b <return> C-p C-r 
e m a c s C-a C-p C-p C-p 5 0 0 0 = C-s g d b C-r C-r 
C-r C-r C-r C-r C-r C-r C-a C-a C-a C-a C-a C-u C-g 
<escape> > C-a C-r g u d C-r C-a q C-p C-u C-p C-p 
1 0 0 0 0 = C-s g d b C-s C-s C-s C-s C-a C-n C-n C-n 
C-n C-p SPC C-s C-s C-a C-x 1 C-v C-n C-n C-n C-n SPC 
N N N N N N P P P i P i C-x 5 2 <switch-frame> C-h 
f g d b - s o SPC - w SPC <escape> h <escape> h s e 
t SPC - w SPC <return> C-x n <tab> <return> C-x 1 <switch-frame> 
C-x n C-x n P N N N N P P P P P C-x p C-n C-n C-n C-SPC 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n <escape> w <tab> x C-x n C-u C-SPC 
C-u C-SPC C-v C-v <escape> < / w C-a C-u C-SPC C-u 
C-SPC C-a C-s g d b C-a C-v C-v C-v C-s C-s C-s C-s 
C-a C-v C-v C-s C-s C-a C-v C-x p <escape> x r e p 
o r t SPC <return>

Recent messages:
Mark set
Auto-saving...done
Saved text from "Ah, actually I can reproduce it with "em"
Follow the link.
Generating summary...done
Mark popped
Mark set
Generating summary...done
Mark popped
Mark saved where search started [3 times]

-- 
"Suppose He doesn't give a shit?  Suppose there is a God but He
just doesn't give a shit?"  [George Carlin]






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
  2009-03-03 10:52 bug#2556: 23.0.91; gdb-ui sometimes messes up window handling Miles Bader
@ 2009-03-08  2:06 ` Nick Roberts
  2009-03-08  7:20   ` Miles Bader
  2014-11-09  6:20 ` Alexandre BACQUART
  2018-05-21  0:18 ` Noam Postavsky
  2 siblings, 1 reply; 7+ messages in thread
From: Nick Roberts @ 2009-03-08  2:06 UTC (permalink / raw)
  To: Miles Bader, 2556; +Cc: emacs-pretest-bug

 > This is an old bug with gdb-ui that seems to have been forgotten (but is
 > still present though; it bites me regularly); the basic symptom is that
 > sometimes when you type a command to a gud debugger prompt, and gud pops
 > up an associated source code buffer, the source code buffer will be
 > displayed in the same window where your gud session buffer was displayed,
 > resulting in the gud buffer being hidden!

Reading through I follow your logic better this time but I would still
suggest that you provide the fix that you wish to see.  FWIW I'm not sure
that I've encountered this problem but I do often find that the overlay
arrow pops up in another frame when other source files are already in
buffers of their own.

-- 
Nick                                           http://www.inet.net.nz/~nickrob






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
  2009-03-08  2:06 ` Nick Roberts
@ 2009-03-08  7:20   ` Miles Bader
  0 siblings, 0 replies; 7+ messages in thread
From: Miles Bader @ 2009-03-08  7:20 UTC (permalink / raw)
  To: Nick Roberts; +Cc: emacs-pretest-bug, 2556

On Sun, Mar 8, 2009 at 11:06 AM, Nick Roberts <nickrob@snap.net.nz> wrote:
> Reading through I follow your logic better this time but I would still
> suggest that you provide the fix that you wish to see.  FWIW I'm not sure
> that I've encountered this problem but I do often find that the overlay
> arrow pops up in another frame when other source files are already in
> buffers of their own.

Right, I'm going to give it a try, just gotta wrap my head around the
various functions again (it's been a while).

-Miles

-- 
Do not taunt Happy Fun Ball.






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
  2009-03-03 10:52 bug#2556: 23.0.91; gdb-ui sometimes messes up window handling Miles Bader
  2009-03-08  2:06 ` Nick Roberts
@ 2014-11-09  6:20 ` Alexandre BACQUART
  2018-05-21  0:20   ` Noam Postavsky
  2018-05-21  0:18 ` Noam Postavsky
  2 siblings, 1 reply; 7+ messages in thread
From: Alexandre BACQUART @ 2014-11-09  6:20 UTC (permalink / raw)
  To: 2556

I'm bothered by this issue since years. I finally decided to take a
look. My usage of gdb in emacs is a bit different from the OP, but the
issue is almost the same.

In fact, I have gdb-many-windows set to t. I like debugging that way so
when gdb starts, I get the 6 windows layout and I keep it that way most
of the time. My issue (which in this regard is the same as the OP) is
that when I select a line in the stack frames window, the matching
source file is opened in the gdb buffer's window (the one showing gdb
command prompt at top-left on the initial layout). Any other command
leading gdb UI to show a source file does that too. This made me crazy
for years, but not anymore. Here's what I did, but first, my reasoning:

What I found is that the gdb buffer's window is not dedicated when I
launch the gdb command. If I select it and do :

  M-: (window-dedicated-p (selected-window))

The output was nil. All other GUD windows (stack, register,
breakpoint...) output t.

The fact that the gdb buffer's window is not dedicated is the reason of
this issue. So I searched for hours to make it dedicated ON LAUNCH.
Doing this after launching gdb is easy, but it has to be done each time
gdb is launched and this is very annoying.

I tried many things (gdb-mode-hook, advising functions...) without
success. As a last resort, I did something I never usually do because
it's ugly. But hey... I guess years of annoyance is enough. So yes, I
modified gdb-mi.el. Nothing big really, just a single line in the
gdb-setup-windows function, this one:

  (set-window-dedicated-p (selected-window) nil)

I replaced nil with t. And it works.

Why ? Well, I suppose that is old code assuming the selected window
holds a source buffer. But in fact it is not, at least on launch,
because you see, this function is called only in 2 places:

- in gdb-restore-windows
- in gdb-get-source-file


On launch, since my gdb-many-windows is t, gdb-restore-windows is
called. And before this function calls gdb-setup-windows, it does that
(copy-paste of the line):

  (switch-to-buffer gud-comint-buffer) ;Select the right window and
frame.

gud-comint-buffer being the gdb buffer. So when gdb-setup-windows is
called, it used (set-window-dedicated-p (selected-window) nil) on the
gdb buffer's window, not on a source file.

Now my issue is gone. BUT (and that is the reason I prefer to explain
what I did instead of providing a clean patch) I'm not sure my change
don't have bad side effects. After all, gdb-get-source-file also calls
gdb-setup-windows...

Well, that's it. In the hope that at least I clarified a bit the source
of the issue in the first place and that someone better than me in lisp
(not hard really!) will provide a clean patch, some day... ;)







^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
  2009-03-03 10:52 bug#2556: 23.0.91; gdb-ui sometimes messes up window handling Miles Bader
  2009-03-08  2:06 ` Nick Roberts
  2014-11-09  6:20 ` Alexandre BACQUART
@ 2018-05-21  0:18 ` Noam Postavsky
  2022-01-27 19:17   ` Lars Ingebrigtsen
  2 siblings, 1 reply; 7+ messages in thread
From: Noam Postavsky @ 2018-05-21  0:18 UTC (permalink / raw)
  To: Miles Bader; +Cc: 2556, Miles Bader

tags 2556 + unreproducible
quit

Miles Bader <miles.bader@necel.com> writes:

> This is an old bug with gdb-ui that seems to have been forgotten (but is
> still present though; it bites me regularly); the basic symptom is that
> sometimes when you type a command to a gud debugger prompt, and gud pops
> up an associated source code buffer, the source code buffer will be
> displayed in the same window where your gud session buffer was displayed,
> resulting in the gud buffer being hidden!
>
>
> Here's the test case I gave (starting with emacs -Q):
>
>      (1) start a gdb session in emacs, and hit a breakpoint or something so
>          that gdb pops up the source in another window (splitting the frame)
>
>      (2) Switch to the source window with "C-x o"
>
>      (3) Delete the other [*gud...*] window with "C-x 1"
>
>      (4) Switch back to the *gud...* buffer using "C-x b *gud...* RET"
>
>      (5) Try to pop up the source buffer again using a gdb command, e.g.,
>          just "frame RET".
>
>    *bang*, *gdb...* buffer disappears, source buffer is only ting
>    displayed... :-(

I'm not able to reproduce this in more recent Emacs versions (I've
tested back to 24.3).






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
  2014-11-09  6:20 ` Alexandre BACQUART
@ 2018-05-21  0:20   ` Noam Postavsky
  0 siblings, 0 replies; 7+ messages in thread
From: Noam Postavsky @ 2018-05-21  0:20 UTC (permalink / raw)
  To: Alexandre BACQUART; +Cc: 2556

Alexandre BACQUART <tek512@gmail.com> writes:

> I'm bothered by this issue since years. I finally decided to take a
> look. My usage of gdb in emacs is a bit different from the OP, but the
> issue is almost the same.

Your description looks like Bug#22374 which I can reproduce in current
Emacs versions (26.1 and 27.0.50).





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#2556: 23.0.91; gdb-ui sometimes messes up window handling
  2018-05-21  0:18 ` Noam Postavsky
@ 2022-01-27 19:17   ` Lars Ingebrigtsen
  0 siblings, 0 replies; 7+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-27 19:17 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 2556, Miles Bader, Miles Bader

Noam Postavsky <npostavs@gmail.com> writes:

> I'm not able to reproduce this in more recent Emacs versions (I've
> tested back to 24.3).

I'm therefore closing this bug report.  If this is still an issue in
recent Emacs versions, please respond to the debbugs address and we'll
reopen.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-01-27 19:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-03-03 10:52 bug#2556: 23.0.91; gdb-ui sometimes messes up window handling Miles Bader
2009-03-08  2:06 ` Nick Roberts
2009-03-08  7:20   ` Miles Bader
2014-11-09  6:20 ` Alexandre BACQUART
2018-05-21  0:20   ` Noam Postavsky
2018-05-21  0:18 ` Noam Postavsky
2022-01-27 19:17   ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).