Subject: bug#13303: 24.2.91; gdb under emacs broken for break commands

From: Stephen Leake <[email-masked]>
Date: Sat, 29 Dec 2012 13:40:02 -0500

Eli Zaretskii <[email-masked]> writes:

> It's XP SP3.  Do you mean you don't get "(gdb)" after typing "end" on
> Windows as well?

Correct.

>> Any suggestions for debugging this further?
>
> Perhaps turn on gdb-enable-debug, and see what you get in the
> gdb-debug-log variable.

That shows the failure:

gdb-debug-log
((recv . "~\">\"
") (mi-send . #("-interpreter-exec console \"end\"
" 27 30 (fontified t))) (recv . "~\">\"
") (mi-send . #("-interpreter-exec console \"p argc\"
" 27 33 (fontified t))) (recv . "~\">\"
") (mi-send . #("-interpreter-exec console \"command 1\"
" 27 36 (fontified t))) (recv . "16^error,msg=\"No registers.\"
(gdb) 
17^done,threads=[]
(gdb) 

This list is in reverse chronological order; the first ">" is the prompt
received after the "end".

>> I've confirmed that 'end' works as expected when running gdb from a bash
>> shell not under emacs.
>> 
>> 'end' also works when running gdb in a bash shell under emacs. I guess
>> that's a mostly functional workaround.
>> 
>> 'end' works with Emacs 23, running gdb with --annotate=3; it seems
>> to be the switch to -i=mi that causes the problem for me.
>
> What if you run GDB from the shell, but using the -i=mi switch, and
> set interactive-mode off? do you see the problem then?

The prompting does terminate with 'end' then. There is no output from gdb
during the break command prompting:

stephe@Shevek$ gdb -i=mi hello
=thread-group-added,id="i1"
~"GNU gdb (GDB) 7.4.1-debian\n"
~"Copyright (C) 2012 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.  Type \"show copying\"\nand \"show warranty\" for details.\n"
~"This GDB was configured as \"i486-linux-gnu\".\nFor bug reporting instructions, please see:\n"
~"<http://www.gnu.org/software/gdb/bugs/>...\n"
~"Reading symbols from /home/Projects/opentoken/org.opentoken/Build/linux_release/hello..."
~"done.\n"
(gdb) 
set interactive off
&"set interactive off\n"
^done
(gdb) 
break 4
&"break 4\n"
~"Breakpoint 1 at 0x8048415: file hello.c, line 4.\n"
=breakpoint-created,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x08048415",func="main",file="hello.c",fullname="/home/Projects/opentoken/org.opentoken/Build/linux_release/hello.c",line="4",times="0",original-location="hello.c:4"}
^done
(gdb) 
command 1
&"command 1\n"
~">"
p argc
~">"
end
=breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x08048415",func="main",file="hello.c",fullname="/home/Projects/opentoken/org.opentoken/Build/linux_release/hello.c",line="4",times="0",script={"p argc"},original-location="hello.c:4"}
^done
(gdb) 
quit
&"quit\n"

So that is the expected behavior

>> I did confirm that Emacs 24 no longer supports --annotate=3.
>
> It does, if you invoke "M-x gud-gdb RET".  Another work-around, I
> guess.  

That works; it actually runs "gdb --fullname"; that seems to be all I need.

> But I still would like to find out why it doesn't work for you with
> -i=mi?

I'd like to know as well; I assume support for --fullname/--annotate=3
will go away at some point.

Is there another (non-emacs) front-end that uses gdb -i=mi that I can
try, to see if it works there? 

I found 'xxgdb' for Debian; it closes immediately after starting, with
an unhelpful error message. I'm running via ssh -X, that may be part of
the problem. Not available on Cygwin.

-- 
-- Stephe