问题标签 [valgrind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
2737 浏览

c++ - 对 valgrind 的补充?

过去几周我一直在努力寻找一个让我的应用程序崩溃的非常困难的错误。首先,应用程序在分配 std::string 时崩溃,然后在释放局部变量期间崩溃。

仔细检查代码后,没有理由在这些位置崩溃;但是,它总是在尝试释放无效指针(即指向无效内存的指针)时崩溃。而且我不知道为什么这个指针没有指向正确的位置。

我怀疑这个问题与某种内存损坏问题或指针损坏问题有关。问题是我无法在视觉上追踪它......但是。我不知道从哪里开始查看代码,并且有数千行代码要经过,所以这似乎不是解决问题的现实方法。

所以Valgrind来了……

我多次依赖的工具来查找代码中可能导致此类崩溃的问题。然而,这一次却是空手而归!当问题发生时,我在 valgrind 中看不到任何错误,因此我问这个问题的原因。

是否有任何其他应用程序可以补充 valgrind 并帮助查找代码中可能导致上述崩溃的问题?

谢谢!

0 投票
4 回答
15175 浏览

c++ - C++ 程序在执行 std::string 分配时总是崩溃

我一直在尝试调试崩溃的应用程序中的崩溃(即断言 * glibc 检测到 * free():无效指针:0x000000000070f0c0 ***),而我正在尝试对字符串进行简单的分配。请注意,我正在使用 gcc 4.2.4 的 linux 系统上编译,优化级别设置为 -O2。使用 -O0 应用程序不再崩溃。

例如

但是如果我按如下方式更改代码它不再崩溃

所以我又挠了挠头!但有趣的模式是崩溃在应用程序中稍后移动,再次出现在另一个字符串中。我发现应用程序在字符串分配上不断崩溃,这很奇怪。典型的崩溃回溯如下所示:

这是非常奇怪的行为,所以我开始在我的应用程序中进一步查看是否存在某种可能导致这种奇怪行为的内存损坏(堆或堆栈)错误。我什至检查了 ptr 损坏并空手而归。除了对代码进行视觉检查之外,我还尝试了以下工具:

  • Valgrind 同时使用 memcheck 和 exp-ptrcheck
  • 电围栏
  • 安全库
  • 我在 gcc 中使用 -fstack-protector-all 编译
  • 我尝试将 MALLOC_CHECK_ 设置为 2
  • 我通过 lint 检查和 cppcheck 运行我的代码(检查错误)
  • 我使用 gdb 逐步完成了代码

所以我尝试了很多东西,但仍然空手而归。所以我想知道它是否可能是链接器问题或某种可能导致此问题的库问题。std::string 是否存在任何已知问题,使得 make 容易在 -O2 中崩溃,或者它可能与优化级别无关?但是到目前为止,我在我的问题中看到的唯一模式是它似乎总是在字符串上崩溃,所以我想知道是否有人知道我导致这种行为的任何问题。

非常感谢!

0 投票
1 回答
2998 浏览

linux - 如何排除某些子进程在 valgrind 下运行?

我在 Linux 中运行一个守护进程,我想在 valgrind 下运行这个守护进程来查找与内存相关的错误。由于它是一个守护进程,我需要使用--trace-children=yes选项,但这会在其生命周期的后期产生许多进程,我不希望它们在 valgrind 下运行。有没有办法排除某些孩子在 valgrind 下奔跑?

0 投票
2 回答
325 浏览

c++ - 安装 valgrind 后断点不起作用

我刚刚安装了 valgrind,但现在我的断点在 qtcreator 中不起作用。我怎样才能解决这个问题?

调试:没有 GDB 进程运行,CMD 被忽略:-stack-list-arguments 2 0 0

0 投票
3 回答
21172 浏览

shared-libraries - 你如何告诉 Valgrind 完全禁止特定的 .so 文件?

我正在尝试在我正在处理的程序上使用 Valgrind,但 Valgrind 会为我正在使用的一个库生成一堆错误。我希望能够告诉它抑制涉及该库的所有错误。我可以为抑制文件想出的最接近的规则是

然而,这并不能完全发挥作用。我必须为出现的每种抑制类型(Cond、Value4、Param 等)创建其中一个,它似乎仍然错过了一些错误,这些错误在堆栈跟踪中有库。

有没有办法给 Valgrind 一个单一的抑制规则,让它完全忽略一个特定的库?即使没有办法制定涵盖所有抑制类型的规则,是否至少有一种方法可以创建一个忽略特定库中特定抑制类型的所有错误的规则?

0 投票
2 回答
5128 浏览

multithreading - 使用 callgrind/kcachegrind 获取每个线程的统计信息

我希望能够看到我的应用程序中的每个线程使用 callgrind 有多“昂贵”。我配置了一个选项,该--separate-thread=yes选项为您提供整个应用程序的 callgrind 文件,然后为每个线程提供一个。

这对于查看任何给定线程的配置文件很有用,但我真正想要的只是每个线程的 CPU 时间排序列表,这样我就可以看到哪些线程是最大的猪。

0 投票
4 回答
1857 浏览

linux - 如何在不重建的情况下在 Linux 平台上分析程序?

我使用了两个分析工具(Windows 上的 VTune 和 Solaris 上的 dbx(在 sunstudio 内)),它们可以在不重新构建程序的情况下分析程序,并且在分析期间,程序只是以与正常速度相同的速度运行。这两个功能都为我节省了很多时间。

现在我想知道Linux平台上是否有一些免费工具可以做同样的事情。我想我需要基于采样的分析工具。VTune 很好但很贵……我听说过 gprof 和 valgrind。但似乎 gprof 需要检测程序(所以我们必须重建程序),而 valgrind 会大大减慢程序的执行速度。(从 valgrind 的介绍来看,Cachegrind 运行的程序比正常慢约 20--100 倍,而我需要分析的 Callgrind 是基于 Cachegrind 的)

对于分析,我只需要弄清楚函数调用的执行时间,这样我就可以找出性能下降发生在哪里。实际上,我不需要 Cachegrind 提供的许多低级分析信息......

0 投票
3 回答
13630 浏览

profiling - 如何使用 callgrind 仅分析程序执行的某个时间段?

我想使用 valgrind 进行一些分析,因为它不需要重新构建程序。(我要分析的程序已经用“-g”构建)

但是 valgrind(callgrind) 很慢......所以这就是我要做的:

  1. 启动服务器(我想分析该服务器)
  2. 某种附加到该服务器
  3. 在我对服务器进行一些操作之前,开始收集配置文件数据
  4. 操作完成后,结束采集profile数据
  5. 分析分析数据。

我可以在 Solaris 上使用 sun studio 来做这种事情。(使用 dbx )。我只是想知道是否可以使用 valgrind(callgrind) 做同样的事情?

谢谢

0 投票
2 回答
2200 浏览

c - 内存泄漏释放 g_strdup

我正在尝试释放 g_strdup 但我不确定我做错了什么。

使用valgrind --tool=memcheck --leak-check=yes ./a.out我不断得到:

我尝试了不同的方法来释放,但到目前为止没有成功。我会很感激任何帮助。谢谢

顺便说一句:它编译并运行良好。


0 投票
1 回答
5426 浏览

linux - 如何将 valgrind 用于内存配置文件

您能告诉我如何将 valgrind 用于内存配置文件吗?我从 google 找到的文章讨论了如何使用 valgrind 进行内存泄漏。我对如何将其用于内存分析感兴趣(即哪些类使用了多少内存)?

谢谢你。