问题标签 [mtrace]

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 投票
4 回答
6671 浏览

c - GLIBC:调试内存泄漏:如何解释 mtrace() 的输出

我正在尝试调试内存泄漏问题。我正在使用mtrace()来获取 malloc/free/realloc 跟踪。我已经运行了我的 prog,现在有一个巨大的日志文件。到现在为止还挺好。但我在解释文件时遇到问题。看看这些行:

奇怪的是,一个调用(相同的返回地址)负责 4 个分配。

更陌生:

在这两行之间,块 0x2aaab43a1700 永远不会被释放。

有谁知道如何解释这个?一次调用如何导致 4 次分配?malloc 怎么会返回一个之前已经分配好的地址呢?

编辑 2008/09/30:分析 GLIBC (mtrace.pl) 提供的 mtrace() 输出的脚本在这里没有任何帮助。它只会说:Alloc 0x2aaab43a1700 重复。但这怎么会发生呢?

0 投票
4 回答
2061 浏览

c - 用于 fortran 程序的 mtrace

我正在尝试用于mtrace检测 fortran 程序中的内存泄漏。我正在使用 gfortran 编译器。有关 mtrace 的(工作)C 示例,请参阅维基百科条目:http ://en.wikipedia.org/wiki/Mtrace

我尝试了两种方法,即包装 mtrace() 和 muntrace() 并从 fortran 程序中调用它们,以及创建一个直接调用 mtrace() 和 muntrace() 的 C 程序,除了中间的泄漏 fortran 代码。这两种方法都无法检测到内存泄漏,但这里我只介绍后者。

例子.c

泄漏的.f90

我编译:

然后我运行:

然后我解析raw.txt mtrace输出:

并得到:

没有内存泄漏。

有什么我做错了,或者我可以做些什么来mtrace找到泄漏的fortran内存分配?我猜 gfortran 正在使用不同的malloc调用,它mtrace不会跟踪......事实上,正如我在上面所写的,如果我编写一个调用 (wrapped)mtrace()muntrace().

已编辑:我考虑了其他选项(包括此处尚未提及的一些选项),但正在调试的实际代码在 P6/AIX 上运行,因此 Valgrind 将“只是”不方便(它需要在不同的机器上运行),而 Forcheck 将是不方便(它需要在不同的机器上运行)和昂贵的(〜3k $)。目前 mtrace 将是最好的解决方案,如果它有效的话。

再次编辑:我的猜测

我猜 gfortran 正在使用不同的malloc调用,它mtrace不会跟踪......

是正确的。查看可执行文件(使用nmreadelf)没有任何malloc()调用,而是调用_gfortran_allocate_array- 可能会调用 malloc)。还有其他想法吗?

再次编辑:我发布了答案,但我不能接受(访问http://stackoverflow.uservoice.com/pages/general/suggestions/39426并请求该功能,它确实需要 - 不需要获得声誉)

0 投票
1 回答
4314 浏览

malloc - 为二进制程序启用 mtrace (MALLOC_TRACE)

如何为没有源的二进制程序启用mtrace() (和环境)?MALLOC_TRACE

mtrace 是 glibc 的功能:http ://www.gnu.org/s/hello/manual/libc/Allocation-Debugging.html

谢谢

0 投票
1 回答
565 浏览

glibc - mtrace + MALLOC_TRACE - 禁用缓冲

如何禁用缓冲mtrace并输出名称来自的文件MALLOC_TRACE

mtrace 启动为:

0 投票
2 回答
702 浏览

c - Windows 的 MALLOC_TRACE

在我们公司,我们有一个类似于 glibc 中的mtrace (MALLOC_TRACE) 功能的内部框架,用于检测内存泄漏。该框架是为在 Windows 上运行而编写的,但在 GNU/Linux 中运行不佳。

那么,有谁知道可以在 Windows、GNU/Linux 甚至 MacOSX 上运行的可移植的 mtrace (MALLOC_TRACE) 等价物?

0 投票
0 回答
452 浏览

c++ - 是否有带有完整堆栈跟踪的 mtrace?还是可以简单地对其进行修改以具有此功能?

在分析大型应用程序的内存消耗期间,我使用来自 glibc 的 mtrace。但问题是它只给出了 malloc 调用的来源,而不是完整的堆栈跟踪。因此,如果我在许多地方使用的方法中使用 malloc,我只会报告一个无法区分的 malloc 来源。另一个问题是标准 c 库和 CSimpleArray 等通用对象。我只知道有人使用了巨大的数组,但不知道具体是谁。

所以我认为我需要完整的堆栈跟踪才能知道谁使用了 malloc。你知道是否存在这样的 mtrace 变体吗?还是可以简单地修改它来做到这一点?

只是备注:我的 mtrace.out 日志包含 300k 行,在使用 mtrace 脚本处理后它有 10k 条目。如果我只本地化 10% 的最大块,这对我来说就足够了。

0 投票
1 回答
317 浏览

c - mtrace 可以用 valgrind 成功运行吗?

我有一个执行 5 个 malloc 和 3 个 free 的程序。我在开始时调用 mtrace(),最后调用 muntrace()。如果我正常运行程序,mtrace 将报告丢失的释放。如果我做:

valgrind 将报告丢失的释放,但 mtrace 不会。

所以我猜你不能同时使用它们——valgrind 会覆盖 mtrace 吗?

0 投票
1 回答
784 浏览

c++ - g++ -static 导致内存泄漏(由 mtrace 报告)

所以我有一个奇怪的问题,我希望有人能解释一下......我有以下代码:

我编译我用这两种方式编译它:

当我查看 mtrace 的输出时(在我的例子中是 mem.out)

当我使用该-static选项时,我看到以下内容,mtrace报告:

但是当我排除该-static选项时,mtrace报告光荣:

那么关于这里发生了什么的任何想法?

0 投票
0 回答
2697 浏览

c++ - Using valgrind's massif with argument parameters for an application

I have a code executable as "demonstrate"> I want to have a neat memory profiling for thios executable. I have gone through the valgrind's massif tool and found out to be something which could fetch me results that I am looking for. Although there is a slight issues I am coming across.

My executable takes various arguments and w/o it it wont run e.g ./demonstrate -t 10 -p 1 -P 3

As soon as I run massif on the above statement it tells me "Error allocating heap"

Quite similar issue happened with mtrace. Included mcheck header and called mtrace and muntrace at the beginning and end and tried calling demonstrate e.g

Although when I run the application without the valgrind option the application runs fine:

Any suggestion on how to get any of these working with several command line arguments.

0 投票
0 回答
433 浏览

c++ - Qt,内存随着 mtrace 增加

我们在具有许多 qgraphicsitem 后代的嵌入式 arm linux 平台上有一个多线程 c++ qt (4.8.1) 应用程序。当调用他们的 update() 方法时,mtrace 会显示增量内存使用情况,每次更新大约 16-18 个字节。观察应用程序 VSZ(使用 ps 或 top 命令),它也在不断增加。如果我们在 valgrind --tool=memcheck 中启动应用程序,并且应用程序正常终止,我们不会看到“肯定丢失”的块。

如果我们注释掉 update() 调用,mtrace 不会再显示任何未释放的区域。

Qt 中是否有可能存在“仍然可达”且不断增长的内存块、重新分配的区域、STL 向量等?如果是,我们如何定期清除它们?

程序结构如下:

所以 mtrace 只监控活动部分,它应该在我们的嵌入式环境中运行几个月。

谢谢,丹尼尔