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

Include source code of malloc.c in gdb?

如何在 gdb 中 include/view malloc 的源代码?

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

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

This这里的人遇到了同样的问题,但是他们没有提到解决方案,即如何真正进入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)

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

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

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

以下对我有用。不知道有没有更好的方法。

  1. 安装 libc6-dbg(您已经完成): sudo apt-get install libc6-dbg
  2. 安装eglibc源码包(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. 启动 gdb 并添加到 malloc 源的路径:(gdb) dir /usr/src/glibc/eglibc-2.19/malloc

(gdb) n

13 char *c = malloc(100);

(gdb) s

__GI___libc_malloc (bytes=100) at malloc.c:2876 2876

{

(gdb)