在gdb中包含malloc.c的源代码?

如何在gdb中包含/查看malloc的源代码?

我想在gdb逐步执行,并在调用任何malloc函数时进入malloc.c源代码。

目前gdb所说的是: malloc.c: No such file or directory.

这个人在这里遇到了同样的问题,但他们没有提到解决方案,即如何实际进入malloc的源代码。

我在Ubuntu server 14.04 ,我已经尝试安装以下软件: libc6-dbglibc6-devlibc6-dbgsym 。 我甚至不知道其中一个软件包是否有帮助,但是安装libc-dbgsym会给我带来以下错误:

 dpkg: error processing archive /var/cache/apt/archives/libc6-dbgsym_2.19-0ubuntu6.6_amd64.ddeb (--unpack): trying to overwrite '/usr/lib/debug/usr/lib/x86_64-linux-gnu/audit/sotruss-lib.so', which is also in package libc6-dbg:amd64 2.19-0ubuntu6.6 dpkg-deb: error: subprocess paste was killed by signal (Broken pipe) 

以下对我有用。 不确定是否有更好的方法。

  1. 安装libc6-dbg(您已经完成): sudo apt-get install libc6-dbg
  2. 安装eglibc-source软件包(ubuntu实际上使用eglibc): sudo apt-get install eglibc-source
  3. 解压缩安装在/ usr / src / glibc中的tar文件: /usr/src/glibc $ sudo tar xvf eglibc-2.19.tar.xz
  4. Crank up gdb并添加到malloc源的路径: (gdb) dir /usr/src/glibc/eglibc-2.19/malloc

(gdb)n

13 char * c = malloc(100);

(gdb)s

malloc.c上的__GI___libc_malloc(字节= 100):2876 2876

{

(GDB)

Gdb只能显示源代码,因为调试编译的二进制文件包含二进制代码和源文件之间的引用。

malloc()在C库中。 在普通系统上,它不使用调试元数据进行编译,并且其源也未安装在系统中。

但是它们是可以访问的,您只需要安装这些库的调试版本。 例如,在debian上,一个apt-get install glibc-debug或者类似的就可以了。 在SuSE上, zipper in libc6-debugzipper in libc6-debug (afaik,也许确切的包名可能有点不同)。