- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从命令行使用 ctest 用 memcheck 运行我的测试并传入 memcheck 命令的参数。
我可以运行 ctest -R my_test
来运行我的测试,我什至可以运行 ctest -R my_test -T memcheck
来通过 memcheck 运行它。
但我似乎找不到一种方法来将参数传递给该 memcheck 命令,例如 --leak-check=full
或 --suppressions=/path/to/file
。
阅读 ctest 的文档后,我尝试将 -D
选项与 CTEST_MEMCHECK_COMMAND_OPTIONS
和 MEMCHECK_COMMAND_OPTIONS
一起使用。我也尝试将这些设置为环境变量。我的尝试都没有产生任何不同的测试命令。总是如此:
Memory check command: /path/to/valgrind "--log-file=/path/to/build/Testing/Temporary/MemoryChecker.7.log" "-q" "--tool=memcheck" "--leak-check=yes" "--show-reachable=yes" "--num-callers=50"
最佳答案
TL;DR
ctest --overwrite MemoryCheckCommandOptions="--leak-check=full --error-exitcode=100" \
--overwrite MemoryCheckSuppressionFile=/path/to/valgrind.suppressions \
-T memcheck
解释
memcheck
选项的各种方法的理解。
CTestConfig.cmake
或
CMakeLists.txt
中(在调用
include(CTest)
之前),您可以设置
MEMORYCHECK_COMMAND_OPTIONS
或
MEMORYCHECK_SUPPRESSIONS_FILE
。
include(CTest)
时,CMake 将在您的构建目录中生成一个
DartConfiguration.tcl
并且设置上述变量将分别在该文件中填充
MemoryCheckCommandOptions
和
MemoryCheckSuppressionFile
。
ctest
在您的构建目录中解析以填充其内部变量以运行
memcheck
步骤的文件。
--overwrite
命令行选项为该运行设置这些 memcheck 选项。 CMAKE_MEMORYCHECK_COMMAND_OPTIONS
变量。我不知道这个变量是什么,我不认为 cmake 以任何方式意识到它。 CTEST_MEMORYCHECK_COMMAND_OPTIONS
或 CTestConfig.cmake
中设置 CMakeLists.txt
(在 cmake 文档中实际上是 documented 的变量)不起作用。似乎这个变量只适用于我从未使用过的 "CTest Client Scripts" 。 MEMORYCHECK_COMMAND_OPTIONS
和 MEMORYCHECK_SUPPRESSIONS_FILE
都没有明确记录在 cmake 中,只是间接地记录在 ctest 文档和 Testing With CTest 教程中。 ctest
在构建中运行时,它会解析文件以填充其内部变量:
关于command-line - 如何使用ctest将参数传递给memcheck?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52730994/
valgrind quickstart page提到: Try to make your program so clean that Memcheck reports no errors. Once
cuda-memcheck 正在报告 Release模式 CUDA 内核的此信息: ========= Error: process didn't terminate successfully ===
我正在使用共享内存运行以下代码: __global__ void computeAddShared(int *in , int *out, int sizeInput){ //not
假设我正在使用一个使用 glibc 的库。当我在通过 Valgrind 运行程序时退出程序时,Valgrind 会检测到各种内存泄漏。我 100% 确定没有任何泄漏与我刚刚编写的几行代码明确相关。有没
我用以下 C 代码引入了内存错误: #include #include int main(int argc, char** argv){ int i; int *a = (int *)malloc
所以在我的程序中,我有一个连续的对象数组。我这样做是因为我想要这些对象中的每一个之间的空间局部性。它们非常小,位于一个非常大的数组中,并按顺序迭代。 因此我这样初始化它们 memoryPool = n
运行我的程序,出现此错误: ==3205== Invalid write of size 8 ==3205== at 0x40167C: push (load.c:75) ==3205==
我正在调试一个链接到商业 API 库(在 Linux 下)的程序。我正在使用 valgrind memcheck,因为我遇到了奇怪的行为,这可能是由于写入超出了分配的内存块所致: valgrind -
我成功地使用 cuda-memcheck 获取有关错误内存访问的错误。使用 -g -G 编译 cuda 代码给出了很好的源位置,如下所示: ========= Error: process didn'
我不认为有一种方法可以像使用 callgrind 那样以编程方式启用/禁用 Valgrind memcheck? (开始/停止检测)。 这是痛苦的,慢得无法使用(如果你想测试的代码自动启动并且你只是让
我试图调试我的 CUDA-C 程序,我发现 cuda-memcheck 可能会有所帮助。我的问题是我无法使用该工具,因为每次运行它时,即使在从互联网上获取的“Hello World”程序上,我也会得到
由于 OpenSSL 使用未初始化的内存,因此对使用 openldap2 的 libldap 的程序进行 Valgrind 是一件苦差事。存在一个 --ignore-fn选项,但仅适用于 Valgri
这是我的代码。 #include #include #include char buf1[100]; char buf2[100]; int main() { char **p = (c
我以前没有使用过 valgrind,但我认为它应该可以检测到一些内存错误。 我的代码: #include unsigned int a[2]; int main() { a[-1] = 21
我正在使用 valgrind 检查我的程序是否在类所需的内存范围内。当我运行 massif 时,我得到一个漂亮的图表,上面显示我的最大内存使用量(堆+堆栈)是 21 KB。当我运行 valgrind
我跑到 cuda-memcheck 调试我的代码,输出如下 ========= Program hit cudaErrorCudartUnloading (error 29) due to "driv
我是编程新手,正在学习 http://c.learncodethehardway.org/book/ex4.html 上的教程它向您展示了如何安装 valgrind。我已经编译了应该显示内存泄漏的示例
我正在使用 Valgrind 工具来了解不同类型的内存泄漏:直接丢失,间接丢失仍然可达并且可能丢失。示例 1: #include #include main() { int *p, i;
我正在从头开始用 C 编写一个计算器(家庭作业)并且在某处遇到内存问题..算法运行完美,但我得到了一组 Valgrind 错误/警告,例如: echo -n "1" | valgrind ./a.ou
我使用 massif、sgcheck 和 memcheck valgrind 的模块来检查 c/c++ 项目。我想知道是否可以让 valgrind 忽略部分代码。当我在我的项目上运行它时,opencv
我是一名优秀的程序员,十分优秀!