Re: Stepping into glibc

Simon Marchi <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAFXXi0=ccaEB517XmJYAqoVoFyWf__JeCPoveeDZ1sTb2SzZmg@mail.gmail.com>
On 14 January 2015 at 17:23, Kip Warner <[email protected]> wrote:
> Hey list,
>
> I'm trying to debug some code with Nemiver (a Gtk+ frontend for GDB).
> When I try to step into glibc functions, it complains about not being
> able to find its source. e.g.
>
>         Cannot find file '/build/buildd/glibc-2.19/posix/getopt1.c'.
>
> I have installed libc6-dbg and glibc-source packages (using Ubuntu
> 14.10).
>
> Is there something I need to add to my ~/.gdbinit, such as a directory
> / set solib-absolute-prefix / set sysroot or what have you?
>
> I could always download the source of my distro's version of glibc into
> the above location, but I'm sure there is a more elegant way of
> handling this.
>
> Respectfully,
>
> --
> Kip Warner -- Senior Software Engineer
> OpenPGP encrypted/signed mail preferred
> http://www.thevertigo.com

You are looking for "set substitute-path" [1].

On Ubuntu/Debian, you can easily download the exact source of a
package you are running (including distribution-specific patches), by
using "apt-get source". In your case, it would be:

  $ apt-get source libc6

You would then use set substitute-path to tell gdb to replace the
"/build/buildd" part, which is the path where the source was on
Ubuntu's server when the package was built, with your own path. For
example, assuming that you download package sources in
/home/kip/package-sources:

  $ set substitute-path /build/buildd /home/kip/package-sources

I might be forgetting something, but that's the idea.

Also, if it happens that you want to debug a program that does not
have a *-dbg version, you can use the dbgsym which is built
automatically for every Ubuntu package [2].

Simon

[1] https://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html#set%20substitute-path
[2] https://wiki.ubuntu.com/DebuggingProgramCrash#Non-built-in_debug_symbol_packages_.28.2A-dbgsym.29
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.