我正在尝试在我正在使用的程序上使用Valgrind,但是Valgrind为我正在使用的其中一个库生成了一堆错误.我希望能够告诉它压制涉及该库的所有错误.我能为抑制文件提出的最接近的规则是
{
rule name
Memcheck:Cond
...
obj:/path/to/library/thelibrary.so
}
Run Code Online (Sandbox Code Playgroud)
然而,这并不能完全胜任这项工作.我必须为每个出现的抑制类型(Cond,Value4,Param等)创建其中一个,并且它似乎仍然会遗漏一些在堆栈跟踪中具有库的错误.
有没有办法让Valgrind有一个单一的抑制规则让它完全忽略一个特定的库?即使没有办法制定涵盖所有抑制类型的规则,是否至少有一种方法可以创建一个忽略特定库中特定抑制类型的所有错误的规则?
可以说我使用的是一个使用glibc的库.当我通过Valgrind运行它时退出程序时,Valgrind会检测到各种内存泄漏.我100%确定没有泄漏与我刚写的几行代码明确相关.有没有办法抑制其他库的泄漏,并将泄漏检测限制为您的直接代码?
例如:
valgrind --tool=memcheck --leak-check=full --leak-resolution=high \
--log-file=vgdump ./Main
Run Code Online (Sandbox Code Playgroud)
可执行文件是从以下源构建的:
// Include header files for application components.
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize( 320,240 );
window.setWindowTitle(
QApplication::translate( "toplevel", "Top-level Widget" ) );
window.show( );
QPushButton button(
QApplication::translate( "childwidget", "Press me"), &window );
button.move( 100, 100 );
button.show( );
int status = app.exec();
return status;
}
Run Code Online (Sandbox Code Playgroud)
有一个报告以下内容的日志文件(删除了大部分):
==12803== Memcheck, a memory error detector
==12803== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward …Run Code Online (Sandbox Code Playgroud) 是否有可能告诉valgrind忽略一些库?特别是glibc库..
实际问题:我有一些代码在正常执行中运行良好.没有泄漏等
当我尝试通过valgrind运行它时,我得到核心转储和程序重启/停止.
核心通常指向glibc函数(通常是fseek,mutex等).我知道不兼容的glibc/valgrind版本可能存在一些问题.
我尝试了各种valgrind版本和glibc版本,但没有运气.有什么建议?