Запустить valgrind в 32-битном режиме на Mac 10.6? - PullRequest
4 голосов
/ 21 мая 2011

Если я скомпилирую 32-битный исполняемый файл в Mac 10.6 с флагом -m32, например:

gcc -m32 test.c -o test

запуск valgrind в «test» завершится неудачнос ошибкой:

valgrind: ./test: невозможно выполнить двоичный файл

Есть ли какие-либо флаги для передачи в valgrind для выполнения этого?Является ли единственный вариант для компиляции valgrind в 32-битном режиме?

Спасибо

Ответы [ 3 ]

1 голос
/ 10 июня 2011

У меня тоже была эта проблема, с valgrind, встроенным / установленным MacPorts.Однако когда я построил его сам, проблема исчезла.Я могу подтвердить, что стандартная сборка valgrind без дополнительных параметров настройки поддерживает как 32-разрядные, так и 64-разрядные программы на Snow Leopard (используется версия 3.6.1.)

1 голос
/ 22 мая 2011

Blender, флаг -m32 означает просто компиляцию файла в 32-битном режиме.Mac 10.6 прекрасно работает с 32-битными исполняемыми файлами.

0 голосов
/ 23 мая 2011

С какой версией Valgrind у вас проблемы?

В Linux и MacOS одна сборка Valgrind может автоматически обнаруживать и выполнять правильные действия как для 32-, так и для 64-разрядных двоичных файлов.

Вот что я вижу на Mac OS X 10.6.7 (10J869):

$ echo "int main() { free(1); return 0; }" | gcc -xc - -g -o a.out
$ echo "int main() { free(1); return 0; }" | gcc -xc - -g -o a.out32 -m32
$ valgrind --version
valgrind-3.7.0.SVN

$ valgrind ./a.out
==46102== Memcheck, a memory error detector
==46102== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==46102== Using Valgrind-3.7.0.SVN and LibVEX; rerun with -h for copyright info
==46102== Command: ./a.out
==46102== 
--46102-- ./a.out:
--46102-- dSYM directory is missing; consider using --dsymutil=yes
==46102== Invalid free() / delete / delete[] / realloc()
==46102==    at 0x100010E9F: free (vg_replace_malloc.c:366)
==46102==    by 0x100000F26: main (in ./a.out)
==46102==  Address 0x1 is not stack'd, malloc'd or (recently) free'd
==46102== 
==46102== 
==46102== HEAP SUMMARY:
==46102==     in use at exit: 88 bytes in 1 blocks
==46102==   total heap usage: 1 allocs, 1 frees, 88 bytes allocated
==46102== 
==46102== LEAK SUMMARY:
==46102==    definitely lost: 0 bytes in 0 blocks
==46102==    indirectly lost: 0 bytes in 0 blocks
==46102==      possibly lost: 0 bytes in 0 blocks
==46102==    still reachable: 0 bytes in 0 blocks
==46102==         suppressed: 88 bytes in 1 blocks
==46102== 
==46102== For counts of detected and suppressed errors, rerun with: -v
==46102== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

$ valgrind ./a.out32
==46103== Memcheck, a memory error detector
==46103== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==46103== Using Valgrind-3.7.0.SVN and LibVEX; rerun with -h for copyright info
==46103== Command: ./a.out32
==46103== 
--46103-- ./a.out32:
--46103-- dSYM directory is missing; consider using --dsymutil=yes
==46103== Invalid free() / delete / delete[] / realloc()
==46103==    at 0xF7D8: free (vg_replace_malloc.c:366)
==46103==    by 0x1F7B: main (in ./a.out32)
==46103==  Address 0x1 is not stack'd, malloc'd or (recently) free'd
==46103== 
==46103== 
==46103== HEAP SUMMARY:
==46103==     in use at exit: 320 bytes in 7 blocks
==46103==   total heap usage: 7 allocs, 1 frees, 320 bytes allocated
==46103== 
==46103== LEAK SUMMARY:
==46103==    definitely lost: 0 bytes in 0 blocks
==46103==    indirectly lost: 0 bytes in 0 blocks
==46103==      possibly lost: 0 bytes in 0 blocks
==46103==    still reachable: 260 bytes in 6 blocks
==46103==         suppressed: 60 bytes in 1 blocks
==46103== Rerun with --leak-check=full to see details of leaked memory
==46103== 
==46103== For counts of detected and suppressed errors, rerun with: -v
==46103== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
...