gdb.info: GDB/MI Stack Manipulation

Go forward to GDB/MI Symbol Query
Go backward to GDB/MI Miscellaneous Commands
Go up to GDB/MI
Go to the top op gdb

GDB/MI Stack Manipulation Commands

The `-stack-info-frame' Command

Synopsis

      -stack-info-frame
   Get info on the current frame.

GDB Command

The corresponding GDB command is `info frame' or `frame' (without
arguments).

Example

N.A.

The `-stack-info-depth' Command

Synopsis

      -stack-info-depth [ MAX-DEPTH ]
   Return the depth of the stack.  If the integer argument MAX-DEPTH is
specified, do not count beyond MAX-DEPTH frames.

GDB Command

There's no equivalent GDB command.

Example

For a stack with frame levels 0 through 11:
     (gdb)
     -stack-info-depth
     ^done,depth="12"
     (gdb)
     -stack-info-depth 4
     ^done,depth="4"
     (gdb)
     -stack-info-depth 12
     ^done,depth="12"
     (gdb)
     -stack-info-depth 11
     ^done,depth="11"
     (gdb)
     -stack-info-depth 13
     ^done,depth="12"
     (gdb)

The `-stack-list-arguments' Command

Synopsis

      -stack-list-arguments SHOW-VALUES
         [ LOW-FRAME HIGH-FRAME ]
   Display a list of the arguments for the frames between LOW-FRAME and
HIGH-FRAME (inclusive).  If LOW-FRAME and HIGH-FRAME are not provided,
list the arguments for the whole call stack.
   The SHOW-VALUES argument must have a value of 0 or 1.  A value of 0
means that only the names of the arguments are listed, a value of 1
means that both names and values of the arguments are printed.

GDB Command

GDB does not have an equivalent command.  `gdbtk' has a `gdb_get_args'
command which partially overlaps with the functionality of
`-stack-list-arguments'.

Example

     (gdb)
     -stack-list-frames
     ^done,
     stack=[
     frame={level="0",addr="0x00010734",func="callee4",
     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
     frame={level="1",addr="0x0001076c",func="callee3",
     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
     frame={level="2",addr="0x0001078c",func="callee2",
     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
     frame={level="3",addr="0x000107b4",func="callee1",
     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
     frame={level="4",addr="0x000107e0",func="main",
     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="32"}]
     (gdb)
     -stack-list-arguments 0
     ^done,
     stack-args=[
     frame={level="0",args=[]},
     frame={level="1",args=[name="strarg"]},
     frame={level="2",args=[name="intarg",name="strarg"]},
     frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
     frame={level="4",args=[]}]
     (gdb)
     -stack-list-arguments 1
     ^done,
     stack-args=[
     frame={level="0",args=[]},
     frame={level="1",
      args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
     frame={level="2",args=[
     {name="intarg",value="2"},
     {name="strarg",value="0x11940 \"A string argument.\""}]},
     {frame={level="3",args=[
     {name="intarg",value="2"},
     {name="strarg",value="0x11940 \"A string argument.\""},
     {name="fltarg",value="3.5"}]},
     frame={level="4",args=[]}]
     (gdb)
     -stack-list-arguments 0 2 2
     ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
     (gdb)
     -stack-list-arguments 1 2 2
     ^done,stack-args=[frame={level="2",
     args=[{name="intarg",value="2"},
     {name="strarg",value="0x11940 \"A string argument.\""}]}]
     (gdb)

The `-stack-list-frames' Command

Synopsis

      -stack-list-frames [ LOW-FRAME HIGH-FRAME ]
   List the frames currently on the stack.  For each frame it displays
the following info:
`LEVEL'
     The frame number, 0 being the topmost frame, i.e. the innermost
     function.
`ADDR'
     The `$pc' value for that frame.
`FUNC'
     Function name.
`FILE'
     File name of the source file where the function lives.
`LINE'
     Line number corresponding to the `$pc'.
   If invoked without arguments, this command prints a backtrace for the
whole stack.  If given two integer arguments, it shows the frames whose
levels are between the two arguments (inclusive).  If the two arguments
are equal, it shows the single frame at the corresponding level.

GDB Command

The corresponding GDB commands are `backtrace' and `where'.

Example

Full stack backtrace:
     (gdb)
     -stack-list-frames
     ^done,stack=
     [frame={level="0",addr="0x0001076c",func="foo",
       file="recursive2.c",line="11"},
     frame={level="1",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="2",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="3",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="4",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="5",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="6",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="7",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="8",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="9",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="10",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="11",addr="0x00010738",func="main",
       file="recursive2.c",line="4"}]
     (gdb)
   Show frames between LOW_FRAME and HIGH_FRAME:
     (gdb)
     -stack-list-frames 3 5
     ^done,stack=
     [frame={level="3",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="4",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"},
     frame={level="5",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"}]
     (gdb)
   Show a single frame:
     (gdb)
     -stack-list-frames 3 3
     ^done,stack=
     [frame={level="3",addr="0x000107a4",func="foo",
       file="recursive2.c",line="14"}]
     (gdb)

The `-stack-list-locals' Command

Synopsis

      -stack-list-locals PRINT-VALUES
   Display the local variable names for the current frame.  With an
argument of 0 or `--no-values', prints only the names of the variables.
With argument of 1 or `--all-values', prints also their values.  With
argument of 2 or `--simple-values', prints the name, type and value for
simple data types and the name and type for arrays, structures and
unions.  In this last case, the idea is that the user can see the value
of simple data types immediately and he can create variable objects for
other data types if he wishes to explore their values in more detail.

GDB Command

`info locals' in GDB, `gdb_get_locals' in `gdbtk'.

Example

     (gdb)
     -stack-list-locals 0
     ^done,locals=[name="A",name="B",name="C"]
     (gdb)
     -stack-list-locals --all-values
     ^done,locals=[{name="A",value="1"},{name="B",value="2"},
       {name="C",value="{1, 2, 3}"}]
     -stack-list-locals --simple-values
     ^done,locals=[{name="A",type="int",value="1"},
       {name="B",type="int",value="2"},{name="C",type="int [3]"}]
     (gdb)

The `-stack-select-frame' Command

Synopsis

      -stack-select-frame FRAMENUM
   Change the current frame.  Select a different frame FRAMENUM on the
stack.

GDB Command

The corresponding GDB commands are `frame', `up', `down',
`select-frame', `up-silent', and `down-silent'.

Example

     (gdb)
     -stack-select-frame 2
     ^done
     (gdb)