gpt4 book ai didi

profiling - 为什么 valgrind massif 不报告任何函数名称或代码引用?

转载 作者:行者123 更新时间:2023-12-04 05:07:23 26 4
gpt4 key购买 nike

我有一个程序意外使用了大量堆(大约 3GB)。我通过 valgrind memcheck 运行它,报告没有泄漏,声称所有堆内存仍然可以访问。

所以我用调试选项重建了我的所有库,并通过 valgrind massif 运行 prog。我正在使用 Valgrind-3.8.1,我今天刚刚下载并在我的盒子上构建了它。命令行是:

valgrind --tool=massif myprog

Valgrind 没有产生错误或警告。生成的输出文件报告所有分配的内存,但大分配的所有堆栈跟踪都无法识别函数名称或代码位置,例如:
97.34% (2,595,141,447B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->88.67% (2,363,882,948B) 0xCA6ACC0: ???
| ->88.67% (2,363,882,948B) 0xC7D7A71: ???
| ->88.67% (2,363,882,948B) 0xC7D705E: ???
| ->88.67% (2,363,882,948B) 0xA6ACB65: ???
| ->59.01% (1,573,247,120B) 0xA6AC9BA: ???
| | ->59.01% (1,573,247,120B) 0x9410C08: ???
| | ->59.01% (1,573,247,120B) 0x94123E2: ???
| | ->59.01% (1,573,247,120B) 0x940B3E9: ???
| | ->59.01% (1,573,247,120B) 0x9428BC0: ???
| | ->59.01% (1,573,247,120B) 0x98B0564: ???
| | ->59.01% (1,573,247,120B) 0x9AF0DA0: ???
| | ->59.01% (1,573,247,120B) 0x9AF09BE: ???
| | ->59.01% (1,573,247,120B) 0x9AF0E6C: ???
| | ->59.01% (1,573,247,120B) 0x4CE6438: run_S (Thread.cpp:98)
| | ->59.01% (1,573,247,120B) 0x3A9A40683B: start_thread (in /lib64/libpthread-2.5.so)
| | ->59.01% (1,573,247,120B) 0x3A994D503B: clone (in /lib64/libc 2.5.so)

我现在有点卡住了。我想知道我构建的库是否实际上没有启用调试 - 但是当我在 gdb 中运行我的代码时,它似乎具有所有调试信息。此外,在 massif 输出中还有一些其他(小得多)内存分配结果,它们从我的代码中标识了函数名称和位置。

这些结果是否表示系统或外部库中的堆栈跟踪?这就是没有信息的原因吗?谁能建议我如何跟踪这些分配?

最佳答案

认为答案是 RTFM...参见 valgrind FAQ第 4.2 节:

Also, for leak reports involving shared objects, if the shared object is unloaded before the program terminates, Valgrind will discard the debug information and the error message will be full of ??? entries. The workaround here is to avoid calling dlclose on these shared objects.



我的代码确实在退出之前明确卸载了它的共享库。我正在重建库卸载被抑制 - 希望有更好的结果:)

关于profiling - 为什么 valgrind massif 不报告任何函数名称或代码引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351549/

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