【发布时间】:2014-01-29 22:29:05
【问题描述】:
情况:
我有一个用 c++11 编写的 autotools 项目,我可以使用 clang 3.3/3.4 或 gcc 4.8 进行编译。 我的 autotools 项目构建了一个共享库和一个可执行文件。
如果我使用 gcc 4.8 并调试可执行文件,我可以添加一个观察点来检查共享库中存在的全局变量的值。
当我使用 QT creator 或 CDT 或其他调试器时,甚至当我查看 gdb 7.6.2 的输出时:使用 clang 编译时,它在调试输出中显示“没有这样的值”,而使用 gcc 我可以在调试器中检查全局变量的值。
我将基本相同的开关发送到 gcc 和 clang,-O0 -g。使用这两个编译器,我可以检查并查看堆栈上的值,但仅使用 clang 3.3 或 clang 3.4 生成的输出我无法检查共享库中存在的全局变量。我的环境是Ubuntu 12.04,自带clang和gdb。
我已确认我正在检查的全局符号确实存在于任一编译器生成的共享库中。
是否有一些特定的编译器开关或我应该发送给 clang 以便能够调试共享库中的符号的东西?或者这可能是一个clang的错误?
【问题讨论】:
-
您是否尝试列出 GDB 中的可用符号(我假设您应该提及调试器)?例如,可能会发生一些名称修改。另一件事是让编译器输出特定于目标的汇编代码并查看它在那里的名称(在 GCC 中它是
gcc -S, IIRC)。