c++ - 使用标准 C++ 库调试符号?Ubuntu / Linux / libstdc++6-8-dbg?
问题描述
有一个libstdc++6-8-dbg
在 Ubuntu Linux 上调用的包(撰写本文时的最新版本)。
它被描述为:
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
?
解决方案
安装包后,GDB 会自动读取调试符号。你不需要以任何不同的方式编译你的程序。
如果您希望您的程序加载调试版本,最好的办法是调整库搜索路径。您可以通过LD_LIBRARY_PATH
临时设置来做到这一点:
$ LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/debug/
$ ldd test
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6 (0x00007efcef670000)
...
或永久:
$ export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/debug/
$ ldd test
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6 (0x00007efcef670000)
...
或者你可以让它成为一个系统范围的改变。您可以在 Ubuntu 中通过添加配置条目/etc/ld.so.conf.d/
并运行ldconfig
以更新缓存来执行此操作。
$ sudoedit /etc/ld.so.conf.d/debug.conf
$ cat /etc/ld.so.conf.d/debug.conf
/usr/lib/x86_64-linux-gnu/debug
$ sudo ldconfig
$ ldd test
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6 (0x00007f3aced53000)
...
配置文件按字母顺序搜索,因此只需确保您编写的文件(debug.conf
上面)早于默认文件(x86_64-linux-gnu.conf
在我的系统上)。
推荐阅读
- c - 为什么我的程序仅根据我将源文件操作数提供给 Clang 的顺序执行不同的操作?
- c# - 不允许找到登录页面的角色
- javascript - 由于身份验证凭据无效或缺少授权标头,身份验证失败。在 nodejs 贝宝 SDK
- mongodb - MongoDB $gt/$lt 运算符,数据类型为数组,键值对为字符串。如何比较数组中字符串类型的负值?
- python - Python没有将文本添加到文件中
- java - 如何再次创建 GRPC ManagedChannel 和存根?
- javascript - 机器人如何将两个或多个参数作为命令接收?
- java - 使用私有构造函数扩展一个类
- java - 如何使用 Flutter/Dart 编写异步 getter?
- javascript - javascript遍历按钮的每个值并获取提交按钮的返回值