Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 解码Valgrind输出_Linux_Valgrind - Fatal编程技术网

Linux 解码Valgrind输出

Linux 解码Valgrind输出,linux,valgrind,Linux,Valgrind,启用内存泄漏的valgrind的输出如下所示。 从堆栈跟踪中,如何找到内存泄漏的位置? 可能是libpq.so吗 ==8909== ==8909== HEAP SUMMARY: ==8909== in use at exit: 373,468 bytes in 2,997 blocks ==8909== total heap usage: 30,367 allocs, 27,370 frees, 5,535,985 bytes allocated ==8909== ==8909=

启用内存泄漏的valgrind的输出如下所示。
从堆栈跟踪中,如何找到内存泄漏的位置? 可能是libpq.so吗

==8909== 
==8909== HEAP SUMMARY:
==8909==     in use at exit: 373,468 bytes in 2,997 blocks
==8909==   total heap usage: 30,367 allocs, 27,370 frees, 5,535,985 bytes allocated
==8909== 
==8909== 123,640 (11,000 direct, 112,640 indirect) bytes in 55 blocks are definitely lost in loss record 290 of 291
==8909==    at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8909==    by 0x52919F3: PQmakeEmptyPGresult (in /usr/lib/libpq.so.5.4)
==8909==    by 0x529BA40: ??? (in /usr/lib/libpq.so.5.4)
==8909==    by 0x5293767: PQgetResult (in /usr/lib/libpq.so.5.4)
==8909==    by 0x5293AB7: ??? (in /usr/lib/libpq.so.5.4)
==8909==    by 0x416B29: readTable() (thread.cpp:366)
==8909==    by 0x40D018: _ZNSt12_Bind_simpleIFPFvvEvEE9_M_invokeIIEEEvSt12_Index_tupleIIXspT_EEE (functional:1732)
==8909==    by 0x40CC94: std::_Bind_simple<void (*()())()>::operator()() (functional:1720)
==8909==    by 0x40CB55: std::thread::_Impl<std::_Bind_simple<void (*()())()> >::_M_run() (thread:115)
==8909==    by 0x5560ABF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17)
==8909==    by 0x65B9E99: start_thread (pthread_create.c:308)
==8909==    by 0x5ABB3FC: clone (clone.S:112)
==8909== 
==8909== 123,640 (11,000 direct, 112,640 indirect) bytes in 55 blocks are definitely lost in loss record 291 of 291
==8909==    at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8909==    by 0x52919F3: PQmakeEmptyPGresult (in /usr/lib/libpq.so.5.4)
==8909==    by 0x529BA40: ??? (in /usr/lib/libpq.so.5.4)
==8909==    by 0x5293767: PQgetResult (in /usr/lib/libpq.so.5.4)
==8909==    by 0x5293AB7: ??? (in /usr/lib/libpq.so.5.4)
==8909==    by 0x416E55: readTable() (thread.cpp:405)
==8909==    by 0x40D018: _ZNSt12_Bind_simpleIFPFvvEvEE9_M_invokeIIEEEvSt12_Index_tupleIIXspT_EEE (functional:1732)
==8909==    by 0x40CC94: std::_Bind_simple<void (*()())()>::operator()() (functional:1720)
==8909==    by 0x40CB55: std::thread::_Impl<std::_Bind_simple<void (*()())()> >::_M_run() (thread:115)
==8909==    by 0x5560ABF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17)
==8909==    by 0x65B9E99: start_thread (pthread_create.c:308)
==8909==    by 0x5ABB3FC: clone (clone.S:112)
==8909== 
==8909== LEAK SUMMARY:
==8909==    definitely lost: 22,000 bytes in 110 blocks
==8909==    indirectly lost: 225,280 bytes in 110 blocks
==8909==      possibly lost: 0 bytes in 0 blocks
==8909==    still reachable: 126,188 bytes in 2,777 blocks
==8909==         suppressed: 0 bytes in 0 blocks
==8909== Reachable blocks (those to which a pointer was found) are not shown.
==8909== To see them, rerun with: --leak-check=full --show-reachable=yes
==8909== 
==8909== For counts of detected and suppressed errors, rerun with: -v
==8909== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 2 from 2)
==8909==
==8909==堆摘要:
==8909==在出口处使用:2997块中的373468字节
==8909==总堆使用率:30367个allocs,27370个free,5535985个字节分配
==8909== 
==8909==123640(11000直接,112640间接)55个块中的字节肯定会在291的丢失记录290中丢失
==8909==at 0x4C2B3F8:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==8909==by0x52919f3:PQmakeEmptyPGresult(在/usr/lib/libpq.so.5.4中)
==8909==0x529BA40:???(in/usr/lib/libpq.so.5.4)
==8909==by0x5293767:PQgetResult(在/usr/lib/libpq.so.5.4中)
==8909==0x5293AB7:???(in/usr/lib/libpq.so.5.4)
==8909==by 0x416B29:readTable()(thread.cpp:366)
==8909==0x40D018:_ZNSt12_Bind_simpleifpvevee9_M_invokeieevst12_Index_tupleixspt_EEE(功能:1732)
==8909==by 0x40CC94:std::_Bind_simple::operator()(函数:1720)
==8909==by 0x40CB55:std::thread::_Impl::_M_run()(线程:115)
==8909==0x5560ABF:???(在/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17中)
==8909==by 0x65B9E99:start_thread(pthread_create.c:308)
==8909==by 0x5ABB3FC:clone(clone.S:112)
==8909== 
==8909==123640(11000个直接字节,112640个间接字节)55个块中的字节肯定会在291个块中的丢失记录291中丢失
==8909==at 0x4C2B3F8:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==8909==by0x52919f3:PQmakeEmptyPGresult(在/usr/lib/libpq.so.5.4中)
==8909==0x529BA40:???(in/usr/lib/libpq.so.5.4)
==8909==by0x5293767:PQgetResult(在/usr/lib/libpq.so.5.4中)
==8909==0x5293AB7:???(in/usr/lib/libpq.so.5.4)
==8909==by 0x416E55:readTable()(thread.cpp:405)
==8909==0x40D018:_ZNSt12_Bind_simpleifpvevee9_M_invokeieevst12_Index_tupleixspt_EEE(功能:1732)
==8909==by 0x40CC94:std::_Bind_simple::operator()(函数:1720)
==8909==by 0x40CB55:std::thread::_Impl::_M_run()(线程:115)
==8909==0x5560ABF:???(在/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17中)
==8909==by 0x65B9E99:start_thread(pthread_create.c:308)
==8909==by 0x5ABB3FC:clone(clone.S:112)
==8909== 
==8909==泄漏汇总:
==8909==肯定丢失:110个块中有22000个字节
==8909==间接丢失:110个块中的225280字节
==8909==可能丢失:0个块中有0个字节
==8909==仍然可以访问:2777个块中有126188个字节
==8909==抑制:0个块中有0个字节
==8909==不显示可访问块(找到指针的块)。
==8909==若要查看它们,请重新运行:--leak check=full--show reachable=yes
==8909== 
==8909==对于检测到的和抑制的错误计数,请使用:-v重新运行
==8909==错误摘要:来自2个上下文的2个错误(已抑制:来自2的2个)

提前感谢您的帮助。

请尝试设置一个断点,以确定可能发生泄漏的位置。然后,运行
monitor leak\u check
查看是否有任何东西丢失。据我所知,您不能在内存丢失时设置断点,但您可以单步执行程序,直到设置为止。

不,不太可能。很可能是
readTable
正在使用
libpq
中的资源,并且未正确释放该资源。为
libpq
安装调试符号可能会有所帮助。泄漏摘要说:肯定丢失:110个块中有22000个字节,所以这不意味着内存泄漏吗?如果没有,那么如果内存泄漏,泄漏摘要将包含什么;不要说没有漏洞。我只是说这不是自由党的错。这是你的错,在
readTable
函数中,它不是lib的一部分。