[PATCH] -stack-info-frames

Nick Roberts
2005-06-17T22:51:39Z

Here's a patch for -stack-info-frames. Having just read Jason's e-mail
about how quick "-stack-list-frames 0 0" is, I'm not sure its necessary.
I thought I'd send it anyway.

Even if we decide not to implement -stack-info-frames, could you please
approve the other parts: Not testing for stack, and not allowing an argument
(mi_cmd_stack_select_frame).

Nick

2005-06-18 Nick Roberts <nickrob@snap.net.nz>

* mi/mi-cmd-stack.c (mi_cmd_stack_info_frame): New function.
(mi_cmd_stack_list_frames, mi_cmd_stack_info_depth):
Don't test for stack.
(mi_cmd_stack_select_frame): Do not allow an argument.
Don't test for stack.

* mi/mi-cmds.c (mi_cmds): Add mi_cmd_stack_info_frame to
entry for -stack-info-frame.

* mi/mi-cmds.h (mi_cmd_stack_info_frame): New declaration.

* gdb.texinfo (GDB/MI Stack Manipulation): Update description
of -stack-info-frame.

*** /home/nick/src/gdb/mi/mi-cmd-stack.c.~1.25.~ 2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmd-stack.c 2005-06-18 01:20:30.000000000 +1200
***************
*** 47,55 ****
struct cleanup *cleanup_stack;
struct frame_info *fi;

- if (!target_has_stack)
- error (_("mi_cmd_stack_list_frames: No stack."));
-
if (argc > 2 || argc == 1)
error (_("mi_cmd_stack_list_frames: Usage: [FRAME_LOW FRAME_HIGH]"));

--- 47,52 ----
***************
*** 104,112 ****
int i;
struct frame_info *fi;

- if (!target_has_stack)
- error (_("mi_cmd_stack_info_depth: No stack."));
-
if (argc > 1)
error (_("mi_cmd_stack_info_depth: Usage: [MAX_DEPTH]"));

--- 101,106 ----
***************
*** 329,344 ****
enum mi_cmd_result
mi_cmd_stack_select_frame (char *command, char **argv, int argc)
{
! if (!target_has_stack)
! error (_("mi_cmd_stack_select_frame: No stack."));

! if (argc > 1)
! error (_("mi_cmd_stack_select_frame: Usage: [FRAME_SPEC]"));

! /* with no args, don't change frame */
! if (argc == 0)
! select_frame_command (0, 1 /* not used */ );
! else
! select_frame_command (argv[0], 1 /* not used */ );
return MI_CMD_DONE;
}
--- 323,341 ----
enum mi_cmd_result
mi_cmd_stack_select_frame (char *command, char **argv, int argc)
{
! if (argc == 0 || argc > 1)
! error (_("mi_cmd_stack_select_frame: Usage: FRAME_SPEC"));

! select_frame_command (argv[0], 1 /* not used */ );
! return MI_CMD_DONE;
! }

! enum mi_cmd_result
! mi_cmd_stack_info_frame (char *command, char **argv, int argc)
! {
! if (argc > 0)
! error (_("mi_cmd_stack_info_frame: No arguments required"));
!
! print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
return MI_CMD_DONE;
}

*** /home/nick/src/gdb/mi/mi-cmds.c.~1.16.~ 2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmds.c 2005-06-18 00:55:55.000000000 +1200
***************
*** 107,113 ****
{ "signal-list-handle-actions", { NULL, 0 }, NULL, NULL },
{ "signal-list-signal-types", { NULL, 0 }, NULL, NULL },
{ "stack-info-depth", { NULL, 0 }, 0, mi_cmd_stack_info_depth},
! { "stack-info-frame", { NULL, 0 }, NULL, NULL },
{ "stack-list-arguments", { NULL, 0 }, 0, mi_cmd_stack_list_args},
{ "stack-list-exception-handlers", { NULL, 0 }, NULL, NULL },
{ "stack-list-frames", { NULL, 0 }, 0, mi_cmd_stack_list_frames},
--- 107,113 ----
{ "signal-list-handle-actions", { NULL, 0 }, NULL, NULL },
{ "signal-list-signal-types", { NULL, 0 }, NULL, NULL },
{ "stack-info-depth", { NULL, 0 }, 0, mi_cmd_stack_info_depth},
! { "stack-info-frame", { NULL, 0 }, 0, mi_cmd_stack_info_frame},
{ "stack-list-arguments", { NULL, 0 }, 0, mi_cmd_stack_list_args},
{ "stack-list-exception-handlers", { NULL, 0 }, NULL, NULL },
{ "stack-list-frames", { NULL, 0 }, 0, mi_cmd_stack_list_frames},

diff -c /home/nick/src/gdb/mi/mi-cmds.h.\~1.15.\~ /home/nick/src/gdb/mi/mi-cmds.h
*** /home/nick/src/gdb/mi/mi-cmds.h.~1.15.~ 2005-01-25 22:30:39.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmds.h 2005-06-18 10:48:59.000000000 +1200
***************
*** 87,92 ****
--- 87,93 ----
extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;
+ extern mi_cmd_argv_ftype mi_cmd_stack_info_frame;
extern mi_cmd_argv_ftype mi_cmd_stack_list_args;
extern mi_cmd_argv_ftype mi_cmd_stack_list_frames;
extern mi_cmd_argv_ftype mi_cmd_stack_list_locals;

** /home/nick/src/gdb/doc/gdb.texinfo.~1.261.~ 2005-06-16 14:36:11.000000000 +1200
--- /home/nick/src/gdb/doc/gdb.texinfo 2005-06-18 01:55:52.000000000 +1200
***************
*** 19205,19211 ****
(without arguments).

@subsubheading Example
! N.A.

@subheading The @code{-stack-info-depth} Command
@findex -stack-info-depth
--- 19205,19220 ----
(without arguments).

@subsubheading Example
!
! @smallexample
! (@value{GDBP})
! -stack-info-frame
! ^done,frame=@{level="1",addr="0x0001076c",func="callee3",
! args=[@{name="strarg",value="0x11940 \"A string argument.\""@}],
! file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
! fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"@}
! (@value{GDBP})
! @end smallexample

@subheading The @code{-stack-info-depth} Command
@findex -stack-info-depth