Debugging with GDB (September 2007)
60 Debugging with GDB
7.4 Source and machine code
You can use the command info line to map source lines to program addresses (and
vice versa), and the command disassemble to display a range of addresses as machine
instructions. When run under gnu Emacs mode, the info line command causes the arrow
to point to the line specified. Also, info line prints addresses in symbolic form as well as
hex.
info line linespec
Print the starting and ending addresses of the compiled code for source line
linespec. You can specify source lines in any of the ways understo od by the
list command (see Section 7.1 [Printing source lines], page 57).
For example, we can use info line to discover the location of the object code for the
first line of function.
m4_changequote:
(gdb) info line m4_changequote
Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
We can also inquire (using *addr as the form for linespec) what source line covers a par-
ticular address. For example,
(gdb) info line *0x63ff
Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
After info line, the default address for the x command is changed to the starting
address of the line, so that ‘x/i’ is sufficient to begin examining the machine code (se e
Section 8.5 [Examining memory], page 67). Also, this address is saved as the value of the
convenience variable $_ (see Section 8.9 [Convenience variables], page 75).
disassemble
This specialized command dumps a range of me mory as machine instructions.
The default memory range is the function surrounding the program counter of
the selected frame. A single argument to this command is a program counter
value; GDB dumps the function surrounding this value. Two arguments specify
a range of addresses (first inclusive, second exclusive) to dump.
The following example shows the disassembly of a range of addresses of HP PA-RISC
2.0 code:
(gdb) disas 0x32c4 0x32e4
Dump of assembler code from 0x32c4 to 0x32e4:
0x32c4 <main+204>: addil 0,dp
0x32c8 <main+208>: ldw 0x22c(sr0,r1),r26
0x32cc <main+212>: ldil 0x3000,r31
0x32d0 <main+216>: ble 0x3f8(sr4,r31)
0x32d4 <main+220>: ldo 0(r31),rp
0x32d8 <main+224>: addil -0x800,dp
0x32dc <main+228>: ldo 0x588(r1),r26
0x32e0 <main+232>: ldil 0x3000,r31
End of assembler dump.