我想用 Valgrind (memcheck) x86 测试我的 C++ 代码是否存在内存泄漏。
但该软件经过交叉编译并在 ARM 上运行。
为了进行一些自动化测试,我决定通过 QEMU 模拟我的 ARM 硬件。
而且我还决定使用cpputest 单元测试 ARM 二进制文件来确保确定性行为并在单元测试涵盖的范围内搜索内存泄漏。
总而言之,我有一个 ARM 二进制文件,应该通过 QEMU 用户模式进行模拟。
我的电话看起来像这样:
./valgrind --smc-check=all qemu-arm-static -L ... arm-ptest-binary
我的 C++ 代码看起来像这样。它有 20 字节的内存泄漏,并且在与 QEMU 一起使用时, valgrind 调用没有发现此泄漏。 在我插入内存分配并且没有释放机制后,我预计会发生内存泄漏
int test_func ()
{
int *foo;
foo = new int [5];
printf("test_func called!\n");
return 1;
}
Valgrind 输出:
==19300== HEAP SUMMARY:
==19300== in use at exit: 1,103,129 bytes in 2,316 blocks
==19300== total heap usage: 4,259 allocs, 1,943 frees, 1,866,916 bytes allocated
==19300==
==19300== LEAK SUMMARY:
==19300== definitely lost: 0 bytes in 0 blocks
==19300== indirectly lost: 0 bytes in 0 blocks
==19300== possibly lost: 304 bytes in 1 blocks
==19300== still reachable: 1,102,825 bytes in 2,315 blocks
==19300== suppressed: 0 bytes in 0 blocks
[...]
当我在 ARM 硬件上运行这个程序时,valgrind-arm 会使用完全相同的二进制文件找到泄漏。
你们有谁知道为什么 Valgrind 没有发现与 QEMU 用户模式相结合的内存泄漏?
提前致谢