【发布时间】:2019-09-07 03:38:39
【问题描述】:
在 Ubuntu Linux 上有一个名为 libstdc++6-8-dbg 的软件包(撰写本文时的最新版本)。
描述为:
GNU 标准 C++ 库 v3(调试文件) 该软件包包含使用编译的 libstdc++ 的共享库 调试符号。
其中包含以下文件:
/usr/lib/x86_64-linux-gnu/debug/libstdc++.a
/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.25
/usr/lib/x86_64-linux-gnu/debug/libstdc++fs.a
通常用 gcc 编译一个(单翻译单元)C++ 程序可以这样写:
$ g++ myprogram.cc
要添加生成用户代码的调试符号,请传递-g:
$ g++ -g myprogram.cc
但这不包括标准库的调试版本。
您需要向g++ 传递哪些额外选项来告诉它使用libstdc++6-8-dbg 提供的标准库的调试版本?
【问题讨论】:
-
你的目标是什么?您想在调试时访问调试符号,这就足够了吗?或者,也许您只需要它们在运行时可用?我会考虑静态地链接 libstdc++ 的调试版本作为最后的手段。
-
@JohnKugelman:我希望回溯能够在运行时正确符号化 libstdc++ 调用帧。如果您知道 (1) 动态链接调试版本和 (2) 静态链接调试版本的 g++ 命令行,我会感谢您。
-
@JohnKugelman:gdb 不在游戏中。我的意思是在程序运行时,我希望它使用 libstdc++ 的调试版本,以便堆栈跟踪正确地表示其中的任何 libstdc++ 调用。
-
libstdc++6-8-dbg的数字代表什么?在我的系统上,我被libstdc++6-10-dbg所吸引,但有 GCC 版本 9.3.0 和 libstdc++ 版本 3.4。 -
编译所有警告和调试信息,所以
g++ -Wall -Wextra -g myprogram.cc
标签: c++ linux ubuntu gcc libstdc++