我需要知道如何找出共享库中的内存泄漏,该库将被加载到发布二进制文件中。我的意思是我使用 -g 选项构建的共享库,但加载共享库的二进制文件不是使用 -g 选项构建的。
我得到的泄漏报告如下。
==739== at 0x4A05809: malloc (vg_replace_malloc.c:149)
==739== by 0x84781B1: ???
==739== by 0x87507F5: ???
==739== by 0x874CF47: ???
==739== by 0x874E657: ???
==739== by 0x874F7C2: ???
==739== by 0x8779C0C: ???
请让我知道如何从共享库中获取泄漏的堆栈跟踪?
假设泄漏确实来自您的共享库,那么我不认为问题在于主可执行文件中缺乏调试。
您的问题更有可能是可执行文件通过调用卸载共享库dlclose
在它完成之前。这意味着当 valgrind 检查泄漏时,库的所有符号信息都消失了,因为库不再加载。
如果您可以重建可执行文件,那么最简单的解决方案可能是暂时停止它调用dlclose
以便库保持加载状态直到结束。
如果您不能这样做,请尝试使用LD_PRELOAD
保持库加载,如下所示:
LD_PRELOAD="/path/to/library.so" valgrind my-executable
这有望欺骗动态链接器,使其即使在关闭后也能保持库的加载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)