'下面是Valgrind运行后生成的堆栈跟踪,但由于???符号的原因,无法找到代码中的可疑行。
==703294== Invalid free() / delete / delete[] / realloc()
==703294== at 0x4C3AE59: operator delete[](void*) (vg_replace_malloc.c:1115)
==703294== by 0x1676C7C6: __cxa_finalize (in /usr/lib64/libc-2.28.so)
==703294== by 0xDBE8F36: ??? (in /xyz/bin/libxyz.so)
==703294== by 0x4008E0D: _dl_fini (dl-fini.c:142)
==703294== by 0x1676C29B: __run_exit_handlers (in /usr/lib64/libc-2.28.so)
==703294== by 0x1676C3CF: exit (in /usr/lib64/libc-2.28.so)
==703294== by 0x16755D8B: (below main) (in /usr/lib64/libc-2.28.so)
(...)
在valgrind运行过程中,是否需要添加任何方法或标志,以便对地址或代码行进行解码,而不是在日志中获取???。
1条答案
按热度按时间ovfsdjhp1#
有关构建共享库的详细信息,请查看here。
如果我的图书馆里有这个
注意,在上面的代码中,我混淆了
new []
和delete
,我应该使用delete []
。我用
g++ -o liblib.so -shared -O3 lib.cpp -fPIC
编译库然后瓦尔格林给了我
如果我在库的编译器选项中将
-O3
更改为-g
,则会得到