Valgrind сообщает об утечке памяти при использовании API - PullRequest
0 голосов
/ 08 ноября 2010

Я создаю приложение с помощью API Dyninst, и с помощью простого приложения Hello World происходит много утечек памяти.Dyninst частично управляет своей собственной памятью, и мне любопытно, если бы Valgrind сообщал об этой памяти как о «просочившейся».

Я использую C ++, и пока мне не совсем удобно, так что еслиЯ забыл включить любую информацию, которая была бы полезна, пожалуйста, скажите так.

Спасибо!

http://www.dyninst.org/


Вот приложение Hello World:

#include "BPatch.h"
int main(int argc, char** argv) {
  BPatch bpatch;
}

Выход Valgrind:

==10307== Memcheck, a memory error detector.
==10307== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.
==10307== Using LibVEX rev 1884, a library for dynamic binary translation.
==10307== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==10307== Using valgrind-3.4.1-Debian, a dynamic binary instrumentation framework.
==10307== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==10307== For more details, rerun with: -v
==10307== 
==10307== 
==10307== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 31 from 1)
==10307== malloc/free: in use at exit: 16,021 bytes in 422 blocks.
==10307== malloc/free: 2,198 allocs, 1,776 frees, 74,304 bytes allocated.
==10307== For counts of detected errors, rerun with: -v
==10307== searching for pointers to 422 not-freed blocks.
==10307== checked 8,642,848 bytes.
==10307== 
==10307== 44 (12 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 51 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x46505EF: Dyninst::SymtabAPI::typeCollection::getAllTypes() (Collections.C:515)
==10307==    by 0x46223F6: Dyninst::SymtabAPI::Symtab::getAllstdTypes() (Symtab.C:2182)
==10307==    by 0x435E510: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 20 bytes in 1 blocks are definitely lost in loss record 52 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x438C3C4: BPatch_type::BPatch_type(Dyninst::SymtabAPI::Type*) (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x435E54F: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 266 (72 direct, 194 indirect) bytes in 2 blocks are definitely lost in loss record 69 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x438B6D7: BPatch_type::BPatch_type(char const*, int, BPatch_dataClass) (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x438BCAA: BPatch_type::createFake(char const*) (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x435E4DB: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 1,412 bytes in 60 blocks are possibly lost in loss record 82 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x4817AD3: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.10)
==10307==    by 0x4818734: (within /usr/lib/libstdc++.so.6.0.10)
==10307==    by 0x48188A5: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.10)
==10307==    by 0x4665707: global constructors keyed to annotations.C (annotations.C:38)
==10307==    by 0x4666E3C: (within ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libsymtabAPI.so)
==10307==    by 0x45A85AF: (within ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libsymtabAPI.so)
==10307==    by 0x400E343: (within /lib/ld-2.9.so)
==10307==    by 0x400E473: (within /lib/ld-2.9.so)
==10307==    by 0x400084E: (within /lib/ld-2.9.so)
==10307== 
==10307== 
==10307== 3,657 (72 direct, 3,585 indirect) bytes in 1 blocks are definitely lost in loss record 84 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x435E583: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 268 (12 direct, 256 indirect) bytes in 1 blocks are definitely lost in loss record 85 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x465072F: Dyninst::SymtabAPI::builtInTypeCollection::getAllBuiltInTypes() (Collections.C:673)
==10307==    by 0x46223C6: Dyninst::SymtabAPI::Symtab::getAllbuiltInTypes() (Symtab.C:2188)
==10307==    by 0x435E598: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 144 bytes in 1 blocks are possibly lost in loss record 91 of 95
==10307==    at 0x4025092: calloc (vg_replace_malloc.c:397)
==10307==    by 0x401128B: _dl_allocate_tls (in /lib/ld-2.9.so)
==10307==    by 0x4A0F672: pthread_create@@GLIBC_2.1 (in /lib/tls/i686/cmov/libpthread-2.9.so)
==10307==    by 0x441B852: InternalThread::createThread() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x44543B5: BPatch_asyncEventHandler::initialize() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x435E62A: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== LEAK SUMMARY:
==10307==    definitely lost: 188 bytes in 6 blocks.
==10307==    indirectly lost: 4,067 bytes in 46 blocks.
==10307==      possibly lost: 1,556 bytes in 61 blocks.
==10307==    still reachable: 10,210 bytes in 309 blocks.
==10307==         suppressed: 0 bytes in 0 blocks.
==10307== Reachable blocks (those to which a pointer was found) are not shown.
==10307== To see them, rerun with: --leak-check=full --show-reachable=yes

1 Ответ

2 голосов
/ 08 ноября 2010

Valgrind не знает, какой у вас код и что такое библиотека. Вероятно, сообщается об утечке в библиотеке.

Вы можете увидеть что просочилось, запустив, как предложено, с --leak-check=full

...