Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to load multiple symbol files in gdb

Tags:

c

debugging

gdb

How to load multiple symbol files in gdb. I have a executable foo.out and loading a module bar.so. I have created two symbol files foo.symbol and bar.symbol. How to load both the files into gdb.

# gdb --core core # (gdb)  # (gdb) symbol-file foo.symbol 

How to load the second symbol file. Or is there any way to load all the files of directory in gdb

like image 988
Ibrar Ahmed Avatar asked Dec 04 '13 16:12

Ibrar Ahmed


People also ask

What is symbol-file GDB?

symbol-file indicates that gdb should use this file as a reference for symbols and debug information. This includes translating a symbol (function or variable name) into an address, a line number into a code address or vice-versa, etc.

What is File command in GDB?

Use the file command to get both symbol table and program to run from the same file. symbol-file with no argument clears out gdb information on your program's symbol table. The symbol-file command causes gdb to forget the contents of some breakpoints and auto-display expressions.

What is Ptype in GDB?

Description. This command prints a detailed description of a type, or the type of the last value in the command history. This command is similar to whatis , but whatis prints just the name of the type.


1 Answers

To set the directory containing symbol file use

set debug-file-directory <directory> 

and use

show debug-file-directory 

to show what currently is set as directory containing symbol files.

Symbol files are read automagically from this directory if their name (without path) is provided by the binary in terms of a debug-link.


To add additional symbols you might use add-symbol-file.

(as the gdb onlinedocs seem to be unavailable at the moment I quote this here)

add-symbol-file filename address

add-symbol-file filename address [ -readnow ] [ -mapped ]

add-symbol-file filename -ssection address ...

The add-symbol-file command reads additional symbol table information from the file filename. You would use this command when filename has been dynamically loaded (by some other means) into the program that is running. address should be the memory address at which the file has been loaded; gdb cannot figure this out for itself. You can additionally specify an arbitrary number of `-ssection address' pairs, to give an explicit section name and base address for that section. You can specify any address as an expression.

The symbol table of the file filename is added to the symbol table originally read with the symbol-file command. You can use the add-symbol-file command any number of times; the new symbol data thus read keeps adding to the old. To discard all old symbol data instead, use the symbol-file command without any arguments.

Although filename is typically a shared library file, an executable file, or some other object file which has been fully relocated for loading into a process, you can also load symbolic information from relocatable .o files, as long as:

  • the file's symbolic information refers only to linker symbols defined in that file, not to symbols defined by other object files,
  • every section the file's symbolic information refers to has actually been loaded into the inferior, as it appears in the file, and
  • you can determine the address at which every section was loaded, and provide these to the add-symbol-file command.

Some embedded operating systems, like Sun Chorus and VxWorks, can load relocatable files into an already running program; such systems typically make the requirements above easy to meet. However, it's important to recognize that many native systems use complex link procedures (.linkonce section factoring and C++ constructor table assembly, for example) that make the requirements difficult to meet. In general, one cannot assume that using add-symbol-file to read a relocatable object file's symbolic information will have the same effect as linking the relocatable object file into the program in the normal way.

add-symbol-file does not repeat if you press after using it.

You can use the -mapped' and-readnow' options just as with the symbol-file command, to change how gdb manages the symbol table information for filename.

like image 106
alk Avatar answered Oct 10 '22 03:10

alk