Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gdb - list source of current function without typing its name

Tags:

In GDB, the command:

list function

will list all the source for the function.

Is there a command that will list all of the source of the function you are currently in, without requiring you to manually type the function name?

like image 644
s5s Avatar asked Oct 10 '12 16:10

s5s


People also ask

What does list command do in gdb?

"list -" lists the ten lines before a previous ten-line listing. One argument specifies a line, and ten lines are listed around that line. Two arguments with comma between specify starting and ending lines to list.

Which command is used to display the source code for the current file?

Use the "file" command. You must compile the program with debug information in order to see the source code while debugging.

How do I list breakpoints in GDB?

You can see these breakpoints with the GDB maintenance command `maint info breakpoints' . Using the same format as `info breakpoints' , display both the breakpoints you've set explicitly, and those GDB is using for internal purposes. Internal breakpoints are shown with negative breakpoint numbers.

How do you jump out of a function in GDB?

Bookmark this question. Show activity on this post. Those who use Visual Studio will be familiar with the Shift + F11 hotkey, which steps out of a function, meaning it continues execution of the current function until it returns to its caller, at which point it stops.


3 Answers

(gdb) help list
List specified function or line.
With no argument, lists ten more lines after or around previous listing.
"list -" lists the ten lines before a previous ten-line listing.
One argument specifies a line, and ten lines are listed around that line.
Two arguments with comma between specify starting and ending lines to list.
Lines can be specified in these ways:
  LINENUM, to list around that line in current file,
  FILE:LINENUM, to list around that line in that file,
  FUNCTION, to list around beginning of that function,
  FILE:FUNCTION, to distinguish among like-named static functions.
  *ADDRESS, to list around the line containing that address.
With two args if one is empty it stands for ten lines away from the other arg.

The *ADDRESS is what is interesting.

On x86/x64 current pointer is in rip register so:

(gdb) list *$pc
0x7ffff7b018a0 is at ../sysdeps/unix/syscall-template.S:82.
77  in ../sysdeps/unix/syscall-template.S

The example is from cat command as I don't have anything with debug info at hand.

like image 191
dpc.pw Avatar answered Oct 02 '22 20:10

dpc.pw


When you are stopped in a function type bt for backtrace. Backtrace will list the current stack. The element at the top, #0, is usually the function you are interested in and the source file and line number is listed also.

For example:

(gdb) bt
#0  myClass::EntityTypeStruct::readAttributes (this=0x7fffd00066e0, buf=0x7fffd0006020 "", len=48)
    at /team/project/src/EntityTypeStruct.cc:55
#1  0x000000000044ca86 in workerThread (ts=0x7fffea71dcc0)
    at /team/project/src/threads/workerThread.cc:219
#2  0x00007ffff775e9d1 in start_thread () from /lib64/libpthread.so.0
#3  0x00007ffff6c07b5d in clone () from /lib64/libc.so.6

See http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_7.html#SEC42 for more info.

Also, when you set a breakpoint you can specify commands that will run everytime you hit that breakpoint. See http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_6.html#SEC35

So, if you know how many lines are in your function you could set a command to list all source lines of the function:

(gdb) break myClass::EntityTypeStruct::readAttributes
Breakpoint 1 at 0x61ec3b: file /team/project/src/EntityTypeStruct.cc, line 38.
(gdb) commands 1
list 38,104
end
like image 24
Dave Hite Avatar answered Oct 02 '22 20:10

Dave Hite


gdbtui can be useful to view the source during debugging.

like image 44
जलजनक Avatar answered Oct 02 '22 19:10

जलजनक