Я хочу проверить свой код C ++ на утечки памяти с помощью Valgrind (memcheck) x86.
Но программное обеспечение кросс-компилируется и работает на ARM.
Чтобы провести некоторое автоматическое тестирование, я решил эмулировать свое оборудование ARM через QEMU.
И я также решил использовать бинарные файлы ARM для модульного теста cpputest , чтобы обеспечить детерминистическое поведение и поиск утечек памяти в объеме, охватываемом модульным тестом.
В общем, у меня есть двоичный файл ARM, который должен эмулироваться через пользовательский режим QEMU.
Мой звонок выглядит так:
./valgrind --smc-check=all qemu-arm-static -L ... arm-ptest-binary
Мой код на C ++ выглядит так. Утечка памяти составляет 20 байт, и вызов valgrind не находит эту утечку при использовании ее с QEMU.
После того, как я вставил выделение памяти и не использовал механизм освобождения, я ожидал утечку памяти
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 находит утечку с точно таким же двоичным файлом.
Кто-нибудь из вас имеет представление, почему Valgrind не обнаруживает утечку памяти в сочетании с пользовательским режимом QEMU?
Заранее спасибо