簡體   English   中英

使用boost日志,Valgrind檢查內存泄漏

[英]The use of boost log, Valgrind check memory leak

測試代碼:

#include <iostream>
#include <boost/log/trivial.hpp>

using namespace std;

int main()
{
        cout << "hello, world" << endl;

        BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
        BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
        BOOST_LOG_TRIVIAL(info) << "An informational severity message";
        BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
        BOOST_LOG_TRIVIAL(error) << "An error severity message";
        BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";

        return 0;
}

g++ -Wall -DBOOST_LOG_DYN_LINK -o ./main.o -c ./main.cc
g++ ./main.o -o main -rdynamic -Wl,-rpath=/usr/local/lib -lpthread -lboost_log -lboost_system -lboost_thread -lboost_filesystem

valgrind --leak-check=full --show-reachable=yes --trace-children=yes --log-file=mem.log ./main

mem.log如下:

==29900== 8 bytes in 1 blocks are still reachable in loss record 1 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C8D04B: boost::log::v2_mt_posix::aux::this_thread::get_id() (in /usr/local/lib/libboost_log.so.1.56.0)

==29900== 8 bytes in 1 blocks are still reachable in loss record 2 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C8751C: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in /usr/local/lib/libboost_log.so.1.56.0)

==29900== 16 bytes in 1 blocks are still reachable in loss record 3 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x511ADD2: boost::detail::add_thread_exit_function(boost::detail::thread_exit_function_base*) (in /usr/local/lib/libboost_thread.so.1.56.0)

==29900== 24 bytes in 1 blocks are still reachable in loss record 4 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x511A44C: boost::detail::make_external_thread_data() (in /usr/local/lib/libboost_thread.so.1.56.0)

==29900== 24 bytes in 1 blocks are still reachable in loss record 5 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C87569: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in /usr/local/lib/libboost_log.so.1.56.0)

 ==29900== LEAK SUMMARY: 
 ==29900==    definitely lost: 0 bytes in 0 blocks. 
 ==29900==      possibly lost: 0 bytes in 0 blocks. 
 ==29900==    still reachable: 520 bytes in 6 blocks. 
 ==29900==         suppressed: 0 bytes in 0 blocks.

報告的唯一問題是“仍然可以解決”的問題,這些問題並不總是真正的問題。 Valgrind是一個很棒的工具,但是該特定類別( --show-reachable )對大多數人沒有用。 您應該簡單地停止使用此選項,因為它沒有顯示您實際需要修復的任何內容。

先前的相同討論

“仍然可以訪問”意味着您的程序可能還可以-它沒有釋放它可能擁有的一些內存。 這是很常見的且通常是合理的。 如果您不想查看這些報告,請不要使用--show-reachable = yes。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM