Nag*_*aga 11 valgrind memory-leaks shared-libraries
我需要知道如何找出共享库中的内存泄漏,这将被加载到发布二进制文件中.我的意思是我使用-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: ???
Run Code Online (Sandbox Code Playgroud)
请告诉我如何从共享库中获取泄漏的堆栈跟踪?
假设泄漏确实来自您的共享库,那么我认为问题不在于主可执行文件中缺少调试.
更可能的问题是可执行文件dlclose在完成之前通过调用来卸载共享库.这意味着当valgrind检查泄漏时,库的所有符号信息都会消失,因为库不再被加载.
如果您可以重建可执行文件,那么最简单的解决方案可能是暂时停止调用,dlclose以便库保持加载直到结束.
如果你不能这样做,那么尝试使用LD_PRELOAD以保持库加载,如下所示:
LD_PRELOAD="/path/to/library.so" valgrind my-executable
Run Code Online (Sandbox Code Playgroud)
有希望欺骗动态链接器即使在它关闭后也保持库加载.