【发布时间】:2019-07-19 17:59:05
【问题描述】:
我们正在 Linux 下使用 CMAKE 编译一个库,然后默认安装在 /opt/mylib 下,其源代码也放置在此文件夹中。
当用户尝试使用 GDB 进行调试时,GDB 不会自动找到库源。
我们如何编译 GDB 查找源的库而不指定任何内容?
例如,C++ 标准库就是这样工作的。我可以调试应用程序,而不必告诉 GDB 在哪里可以找到源代码。
注意:这个问题不是关于如何让GDB找到源(我知道怎么做)而是如何适配CMakeLists.txt和编译过程中不需要手动指定GDB中的源目录.
【问题讨论】:
-
我认为这是不可能的,但一种解决方案可能是在目标机器上定义一个符号链接,名为
/path/to/my/sources,指向/opt/mylib -
我相信它是可能的,因为
rpmbuild执行类似的技巧来创建 debuginfo RPM,它不仅安装调试符号而且安装源,后者在与构建二进制文件的位置不同的位置。 GDB 正确定位了以这种方式提供的源。我只是不知道rpmbuild是怎么做到的。 -
经过调查,似乎
rpmbuild附带了一个程序debugedit,用于修改ELF 调试信息。这是一个内部程序,未安装在路径中,并且与许多其他 RPM 组件不同,它是二进制文件,而不是脚本。如果你想弄清楚它是如何工作的,那么我确定源是可用的。 -
@JohnBollinger:
debugedit看起来是一个潜在的解决方案。非常感谢!