【发布时间】:2015-06-16 11:21:54
【问题描述】:
我目前正在尝试使用 valgrind 解决一些内存错误,但我在输出信息方面遇到了一些问题,源文件/行号没有出现。所以我有这种输出:
==11656== by 0xA5A095: Class::method(T1, T2) (in /usr/local/bin/MyBinary)
我正在我的 Ubuntu 上使用调试信息(-g 标志)和 GCC 4.8.2(也尝试使用 clang 3.4)编译我的程序。我正在使用 cmake 构建系统,因为我想制作几个库,然后制作一些二进制文件。我在使用make VERBOSE=1 编译期间检查了-g 标志是否存在。
我要调试的二进制文件与几个库链接,其中一个重要且需要调试信息的是 libA,它也与 libB 和 libC 链接。 libA、libB 和 libC 是我制作的库。它们也都使用调试信息进行编译,并且每次都静态链接。
所以依赖方案是:MyBinary
奇怪的是 valgrind 给了我函数名称和命名空间,所以我假设我的二进制文件和库没有被剥离。此外,我检查了从二进制符号中检索源文件和行号(给定nm 和addr2line),信息在这里。
用于编译的标志是:-g -std=c++11,
对于 valgrind:--leak-check=full --track-origins=yes.
我是否缺少一些用于编译、链接或 valgrind 的标志/选项?问题出在 valgrind 会让我感到惊讶......
感谢您花时间阅读我。
【问题讨论】:
-
你确定你的
MyBinary也是用-g编译的吗?从您的问题中无法完全清楚您是否检查了MyBinary或lib*是否包含调试信息。 -
是的,很抱歉不清楚。
标签: c++ linux gcc clang valgrind