【问题标题】:Linux - source files/lines doesn't appear when running valgrindLinux - 运行 valgrind 时不出现源文件/行
【发布时间】: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 给了我函数名称和命名空间,所以我假设我的二进制文件和库没有被剥离。此外,我检查了从二进制符号中检索源文件和行号(给定nmaddr2line),信息在这里。

用于编译的标志是:-g -std=c++11, 对于 valgrind:--leak-check=full --track-origins=yes.

我是否缺少一些用于编译、链接或 valgrind 的标志/选项?问题出在 valgrind 会让我感到惊讶......

感谢您花时间阅读我。

【问题讨论】:

  • 你确定你的MyBinary也是用-g编译的吗?从您的问题中无法完全清楚您是否检查了 MyBinarylib* 是否包含调试信息。
  • 是的,很抱歉不清楚。

标签: c++ linux gcc clang valgrind


【解决方案1】:

我发现它为什么不起作用。我没有检查...我的磁盘上存在另一个同名的二进制文件...所以,这个问题不再相关。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多