gpt4 book ai didi

c - heapusage 不显示正在分析的程序的函数名称

转载 作者:行者123 更新时间:2023-11-30 16:45:11 24 4
gpt4 key购买 nike

我正在尝试使用 heapusage查找我正在使用的 mencoder 版本中的内存泄漏(碰巧是最新版本 1.3.0)。

mencoder 是在本地构建的,并配置了“--enable-debug”。

堆使用输出如下所示:

==29017== 4096 bytes in 1 block(s) are lost, originally allocated at:
==29017== at 0xb7fcd1c2: realloc + 72
==29017== at 0x00269f75:
==29017== at 0x00267e4d:
==29017== at 0x002680d0:
==29017== at 0x002716ae:
==29017== at 0x00271bd4:
==29017== at 0x0029af09:
==29017== at 0x00262f64:
==29017== at 0xb79dad36: __libc_start_main + 230
==29017== at 0x00260655:

我在这里得到的名称全部来自 C 库,我非常希望获得所有这些地址的名称。

我尝试过的事情:addr2line -f -e mencoder 0x00269f75 - 这告诉我调用来自显然不涉及的代码部分(该地址位于 rtsp 网络代码中,我正在从 USB 读取摄像机)。

禁用 ASLR - 不应该(也没有)在此级别上产生任何行为变化,但使比较运行变得更加简单。

如果有人可以教我如何从这个工具中获取实际信息,我将不胜感激。

(注意:我也在这段代码上尝试过 valgrind,但它在运行时只是呕吐。)

最佳答案

使用命令:

heapusage --help

导致使用此实用程序的所有用户信息都列在标准输出上。

没有任何功能可以告诉它忽略标准 C 库。所以它会输出很多错误的内存泄漏声明。

-n 选项可用于告诉它不执行符号查找。

我怀疑您的本地版本已从原始版本修改为不再执行符号查找。

建议您从 gethub 下载自己的 heapusage 源代码副本。编译/链接/安装它,全部在您自己的计算机上

这是使用一个小的本地文件调用 calloc()free() 的运行结果

注意:苹果苹果葡萄是特定程序的输出,可以忽略。

./heapusage -n ~/Documents/forum/untitled1
apple
apple
grape
==17050== Heapusage - https://github.com/d99kris/heapusage
==17050==
==17050== HEAP SUMMARY:
==17050== in use at exit: 1024 bytes in 1 blocks
==17050== total heap usage: 2 allocs, 1 frees, 1056 bytes allocated
==17050==
==17050== 1024 bytes in 1 block(s) are lost, originally allocated at:
==17050== at 0x00007f815961609d
==17050== at 0x00007f815929a1d5
==17050== at 0x00007f81592a8594
==17050== at 0x00007f81592a78f8
==17050== at 0x00007f81592a628d
==17050== at 0x00007f815929c738
==17050== at 0x0000000000400b0d
==17050== at 0x00007f815924d830
==17050== at 0x0000000000400849
==17050==
==17050== LEAK SUMMARY:
==17050== definitely lost: 1024 bytes in 1 blocks
==17050==

这是在同一文件上进行相同运行的结果,不使用 -n 选项

 ./heapusage ~/Documents/forum/untitled1
apple
apple
grape
==16969== Heapusage - https://github.com/d99kris/heapusage
==16969==
==16969== HEAP SUMMARY:
==16969== in use at exit: 1024 bytes in 1 blocks
==16969== total heap usage: 2 allocs, 1 frees, 1056 bytes allocated
==16969==
==16969== 1024 bytes in 1 block(s) are lost, originally allocated at:
==16969== at 0x00007f2877e2e09d: malloc + 49
==16969== at 0x00007f2877ab21d5: _IO_file_doallocate + 85
==16969== at 0x00007f2877ac0594: _IO_doallocbuf + 52
==16969== at 0x00007f2877abf8f8: _IO_file_overflow + 456
==16969== at 0x00007f2877abe28d: _IO_file_xsputn + 173
==16969== at 0x00007f2877ab4738: _IO_puts + 168
==16969== at 0x0000000000400b0d:
==16969== at 0x00007f2877a65830: __libc_start_main + 240
==16969== at 0x0000000000400849:
==16969==
==16969== LEAK SUMMARY:
==16969== definitely lost: 1024 bytes in 1 blocks
==16969==

关于c - heapusage 不显示正在分析的程序的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44206678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com