我有一些未来项目:main.cpp中
#include <iostream>
#include <cstddef>
#include <dlfcn.h>
int main()
{
void* handle = dlopen("./shared_libs/libshared.so", RTLD_LAZY);
if (NULL == handle)
{
std::cerr << "Cannot open library: " << dlerror() << '\n';
return -1;
}
typedef int (*foo_t)(const std::size_t);
foo_t foo = reinterpret_cast<foo_t>(dlsym(handle, "foo"));
const char* dlsym_error = dlerror();
if (dlsym_error)
{
std::cerr << "Cannot load symbol 'foo': " << dlsym_error << '\n';
dlclose(handle);
return -2;
}
std::cout << "call foo" << std::endl;
foo(10);
dlclose(handle);
return 0;
}
shared.cpp:
#include <cstddef>
#include <iostream>
extern "C"
{
int foo(const std::size_t size)
{
int b = size / size;
int* a = new int[size];
std::cout << "leaky code here" << std::endl;
}
}
和Makefile:
all:
g++ -fPIC -g -c shared.cpp
g++ -shared -o shared_libs/libshared.so -g shared.o
g++ -L shared_libs/ -g main.cpp -ldl
我用tcmalloc调试该测试程序,其负载动态libshared.so:foo并执行it.run命令:LD_PRELOAD = / USR /本地/ LIB / libtcmalloc.so HEAPCHECK =正常./a.out
1.最大的泄漏:
- 使用本地文件./a.out。
- 在1个对象从被分配40个字节泄漏:
- @ 7fe3460bd9ba 0x00007fe3460bd9ba
- @ 400b43主
- @ 7fe346c33ec5 __libc_start_main
- @ 400999 _start
- @ 0 _init
为什么我得到的地址0x00007fe3460bd9ba而不是线FOO功能? 请帮忙
附言:我试图用GDB与LD_PRELOAD = ... / tcmalloc.so,但我得到:“有人是ptrace的()荷兰国际集团我们,会自动关机打开perftools堆泄漏检查关”