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

Posted

技术标签:

【中文标题】在 gdb 中包含 malloc.c 的源代码?【英文标题】:Include source code of malloc.c in gdb? 【发布时间】:2015-07-09 10:33:34 【问题描述】:

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

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

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

This guy here 遇到了同样的问题,但他们没有提到解决方案,即如何实际步入 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)

【问题讨论】:

您需要找到或编译库的调试版本。 @MartinJames 那是我失败的部分! :( 【参考方案1】:

以下内容对我有用。不知道有没有更好的办法。

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

(gdb)n

13 字符 *c = malloc(100);

(gdb) s

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

(gdb)

【讨论】:

像魅力一样工作!另外,第4步可以添加到.gdbinit! 太棒了!一个有点相关的问题(听起来你知道)。但对于未来的读者:不要打破 malloc 本身,因为 libc 会执行各种符号操作,因此 malloc 符号不是实际调用的 malloc。而是打断调用者并进入malloc 调用。 对于Ubuntu 18.04 用户来说,eglibc-source 似乎不再是东西了。根据我对 repos 的搜索,现在似乎只是 glibc-source【参考方案2】:

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

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

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

【讨论】:

我应该因为你说“gdb 不是巫师”而投反对票! 开个玩笑,我想我做到了。我在 Ubuntu 上,我相信 libc6-dbg 相当于你的建议! @Paschalis 对不起,我对此没有任何负面意图。我从答案中删除了这个。 我在开玩笑 :) 我已经安装了 libc 的调试版本。还是不行!我刚刚更新了我的问题! @Paschalis glibc 源是否也在您的系统上?你能看到它的文件吗?它很大。

以上是关于在 gdb 中包含 malloc.c 的源代码?的主要内容,如果未能解决你的问题,请参考以下文章

linux 下面怎么用gdb调试多个.c文件?

如何教 Eclipse 在源路径中包含 Maven 源包?

xml 使用Maven构建在JAR中包含JAVA源

xml 使用Maven构建在JAR中包含JAVA源

如何在 Eclipse 代码模板中包含 svn 关键字

如何在生成的 DACPAC 文件中包含 Sql Permission Statement