分析内存泄漏

时间:2013-05-28 22:04:22

标签: c++ macos memory-leaks gdb instruments

对于通用标题感到抱歉,但我不知道如何更好地澄清。

我正在MacOS 10.8.3上编写一个C ++程序。我尝试使用Apple的仪器分析是否存在内存泄漏,这是结果

enter image description here

不幸的是(实际上不知道为什么)Call Tree没有显示任何条目,所以我无法理解哪个调用会导致泄漏。

但是,Instruments显示泄漏内存的地址,因此我打开gdb并将其附加到正在运行的进程,以便分析内存的内容并提供有关错误的一些提示。这是gdb返回的内容

(gdb) x/s 0x7fa0f3400720
0x7fa0f3400720:  "OS_dispatch_queue_specific_queue"
(gdb) x/s 0x7fa0f34005d0
0x7fa0f34005d0:  "OS_xpc_connection"
(gdb) x/s 0x7fa0f3400640
0x7fa0f3400640:  "OS_dispatch_object"
(gdb) x/s 0x7fa0f3400660
0x7fa0f3400660:  "OS_dispatch_queue"
(gdb) x/s 0x7fa0f3400680
0x7fa0f3400680:  "OS_dispatch_source"
(gdb) x/s 0x7fa0f34006a0
0x7fa0f34006a0:  "OS_dispatch_semaphore"
(gdb) x/s 0x7fa0f34006c0
0x7fa0f34006c0:  "OS_dispatch_group"

等等。显然我的代码中没有任何字符串。

我正在大量使用pthread来加速计算。可能这些泄漏是由于我使用pthreads时出现的一些错误造成的,或者其他原因是什么?实际上让我感到惊讶的是泄漏是(相对)小的,而如果我的代码中存在设计错误,我会期待更大的泄漏(代码运行一段时间,我正在创建并销毁数百个 - 如果不是成千上万的线程。

如果有必要,我可以显示我的部分代码(虽然项目不是很大,但在这里发布它肯定太大了。)

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我对仪器知之甚少。您可以尝试 valgrind ,这对于检测内存泄漏非常有用。