【问题标题】:How can I use debug version of glibc to build a program?如何使用调试版本的 glibc 构建程序?
【发布时间】:2016-05-31 05:26:19
【问题描述】:

我想在 glibc 中调试一些东西,所以我想使用 glibc 的调试版本来构建程序。 如果我只是使用“gcc -o test test.c”来构建程序,

apt-get install libc6-dbg

apt-get source libc6-dev

当我调试程序时,一些 val 被告知它已经过优化。并且 EIP 总是跳回来。

如何调试 glibc 的调试版本。

【问题讨论】:

  • 试过用 -g 编译?
  • @immibis:这不符合 OP 的要求。
  • 实际上这不是一个单独的版本,而是主库的调试符号。由于主库是用优化构建的,是的,可以预期一些函数是内联的,否则会被优化掉。如果您需要未优化的代码,您可能希望使用 -g 标志从头开始编译 libc,但即使在这种情况下也有一些 asm 内联。

标签: c linux gcc glibc


【解决方案1】:

警告:我使用 Fedora,但它有类似的机制。

调试包会下载一个附加文件,该文件包含使用-g 编译为glibc 时将获得的调试信息。

但是,这个包与 标准 构建相匹配,该构建是使用优化构建的(例如-O2)。

这是导致您看到的行为的优化。所以,gdb 的“覆盖率”会参差不齐。

您想要的是一个由-gdwarf-2-O0 构建的glibc 版本。 AFAIK,您必须通过自己从源代码构建 glibc 来获得它。

您可能必须运行configure 脚本并选择-g-O 选项进行构建。然后,运行make。确切的细节应该在源文档 [或在线] 某处。

然后,您必须 [强制] 将您的程序链接到源代码构建版本。

【讨论】:

  • GLIBC 不能用-O0 构建。它需要优化才能开启。
  • 对我很有用,非常感谢! -O1 对我来说没问题 :)
猜你喜欢
  • 2018-12-19
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2021-09-20
  • 2012-12-09
  • 2020-07-27
相关资源
最近更新 更多