问题标签 [massif]
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.
c++ - 如何创建多线程 C++ 程序的每个函数的内存配置文件?
问题:
我有一个多线程 C++ 程序,它处理相当多的数据(几 GB)。在某些时候,我的程序用完了主内存,这是我想避免的。从理论上讲,这不应该发生,因为这个程序分析的数据量仍然比我的主内存少得多。
假设的问题根源:
我的猜测是,在某些时候,我会将所有这些数据按值传递给某个函数或一些类似的愚蠢错误。这比增加我的内存使用量而且我用完了主内存。
如何找到导致问题的代码?
我想按功能分析我的程序的内存使用情况。所以结果应该是这样的(两者f
都是g
函数):
正如这篇文章中所建议的,我看过Valgrind 的 massif。看起来像一个了不起的工具,但valgrind --tool=massif ./myProgram
需要很长时间(即使我大大减少了数据量)。
问题:
我可以使用什么工具来查找源代码中的“错误”?我正在寻找一些不需要永远运行的东西,但仍然能给我我需要的洞察力。我也愿意通过以某种方式更改我的源代码以编程方式执行此操作。
环境:
编译器:Clang 9
操作系统:RHEL
C++:标准=17
segmentation-fault - 使用 Valgrind 时的一般保护错误
事先为不添加代码道歉,因为我没有这样做的权限。
我有一个程序在使用 Valgrind massif 工具启动后 2-10 秒的可变时间后在某些系统上崩溃。使用 gdb 运行相同或按原样运行应用程序不会导致任何崩溃。
这工作正常 -
valgrind --tool=massif --pages-as-heap=yes ./<prog> <prog_args>
这会导致程序使用 SIGSEGV 中止
valgrind --tool=massif --stacks=yes ./<prog> <prog_args>
当程序以 Valgrind 终止时,回溯顶部的函数如下所示,行号指向带有标志的 if 条件语句:
我试图寻找答案,但还没有发现任何有用的东西。任何帮助或指示都会非常棒!
c++ - 堆释放分析
valgrind 的massif
工具能够在我的代码(包括调用堆栈)中给我分配数据的点。
例如
除了获取 malloc/new 的这些统计信息之外,是否可以免费/删除来获取它?
即是否可以跟踪解除分配?
linux - Valgrind地块工具报告相同的快照
我需要在需要很长时间才能完成的并行代码中使用 massif 工具运行 valgrind。我想定期拍摄快照。
我执行以下操作:
在另一个终端中,我运行以下循环:
然而,“snapshots.txt”始终具有相同的内容。我尝试了不同的 valgrind 选项,例如 --time-unit=ms 和 --time-unit=i。而且,如果我在执行时刻 X 和时刻 X+Y 获得所有快照,则两个生成的文件是相同的。
我究竟做错了什么?
c++ - Make valgrind to collect the data on request
I have got a memory leak which I'm trying to track with massif. The problem is that the leak happens always like couple of hours after an app is started. Now application that runs on massif is about 20 times slower than normal, thus for the leak to happen I must wait like 100 hours or more. I was even trying to wait this time, but it happened that no leak was there. I suspect that the leaks may somehow occur only when my project is running on full speed? Since it is not possible to attach valgrind to running process, is there maybe the way to postpone valgrind so it will collect the data after some time, or even better on the request? This way I could wait some time when the program is running fine (with hopefully normal speed), and start logging at the moment leaks are occurring.
Any help is appreciated.
c - 如何使用 vgdb 在 Valgrind 地块中强制创建新快照?
我正在使用Valgrind
该massif
工具来监视发生内存分配的所有代码部分。在这种情况下,我使用这个命令来运行我的程序Valgrind
:
我的问题是,运行程序 30 分钟后,它开始分配更多内存。我想监视代码的哪些部分正在分配内存。我应该注意到这不是内存泄漏,所以我没有使用Memcheck
,而是使用了massif
. 该命令在开始时从内存中获取快照,但之后,我没有内存中的快照。
为了解决这个问题,我使用vgdb
命令按以下方式拍摄详细快照:
但看起来这个命令正在使用捕获的快照,而不是新的。那么如何在需要时拍摄新快照呢?或者我应该以某种方式释放捕获的快照?