【问题标题】:Build gcc with adding debugging symbol to libgomp.so通过向 libgomp.so 添加调试符号来构建 gcc
【发布时间】:2019-08-07 02:02:27
【问题描述】:

我正在研究 OpenMP 的实现细节。我正在尝试查看 libgomp.so 的源代码。我有gcc 的源代码,我知道如何构建它。但是我想在libgomp.so中添加调试符号,这样,下面的命令就生效了。

nm libgomp.so

所以我刚刚生成了Makefile 来使用configure 构建gcc。我认为向 libgomp.so 添加调试符号与 libgomp 目录(gcc 的子目录)内的Makefile.inMakefile.am 有关。但是文字太长了,标志太多了。我想知道在哪里修改。请帮我弄清楚。

其实我是这个系统的新手。 Makefile我研究了好几遍,但Makefile.inMakefile.amconfigure等是我这次第一次遇到的。

我刚刚在libgomp.info 找到了候选人,有一些环境变量的解释。有

* GOMP_DEBUG:: Enable Debugging output

但我不知道如何使用它。

【问题讨论】:

  • nm 无论是否存在调试符号都应该工作,因为动态链接器需要查看符号名称才能进行任何链接...所以尝试在可执行文件上从 ldd 开始,看看哪个正在使用 libgomp.so,然后使用带有 nm 的完整文件名。当然,您还可以查看 LLVM OpenMP 运行时...
  • @JimCownie 感谢您的回答。我来看看 LLVM。

标签: gcc makefile openmp software-distribution libgomp


【解决方案1】:

(我没有足够的声誉来发表评论,所以我必须将其写为答案。)

我不是该主题的专家,但根据 nm 的文档,它适用于目标文件。 libgomp.so 是一个精灵文件。您可以改用readelf -s 来列出符号。此外,您不必自己编译 gcc。您可以在大多数 linux 发行版上安装 libgomp 的调试符号(在基于 ubuntu 的系统上为 sudo apt-get install libgomp1-dbg)。

了解 openmp 的一个重要部分是了解编译器对您的 omp pragma 的作用,因此您可能希望在项目中为 openmp 启用源代码调试。您可以通过将 gdb 指向 openmp 源或将 openmp 源相对于您的项目来执行此操作,以便调试器可以找到所需的源。 在我的例子中,gdb 在../../../src/libgomp/parallel.c 中寻找源代码。将源代码相对于我的可执行文件确实有效,让我在我的 IDE 中调试时单步执行 openmp 源代码。

【讨论】:

  • 感谢您的建议。我刚刚开始使用readelf ann objdump 并稍微了解了内部结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多