Контекст разрабатывает приложение для Android, которое использует несколько статических исполняемых двоичных файлов через системный вызов sh
. Один из двоичных файлов в конечном итоге может возникнуть при использовании мобильного телефона samsung galaxy s4 (но не при использовании эмулятора или сотового телефона Sony Xperia tipo), поэтому после http://embetek.blogspot.com.es/2011/10/valgrind-for-arm.html с несколькими пользовательскими модификациями (CFLAGS = '- static -march = armv7-a) получениеПолучение valgrind для android. Проблемы с `valgrind` ищет` memcheck-arm-linux`
$ ldd valgrind
not a dynamic executable
$ file valgrind
valgrind: ELF 32-bit LSB executable, ARM, version 1 (SYSV),
statically linked, for GNU/Linux 3.2.0, not stripped.
Loaded на целевой телефон (версионируются андроид 4.2.2 ядро 3,4 ...), (context.getFilesDir() + File.separator + "valgrind").canExecute()
возвращает ложь.
Бег sh -c PATH...valgrind
сообщает valgrind: can't execute: Permission denied
и статус 126 на выходе.
Emulator кажется запустить ядро 2.6 ... так что adb shell
и выполнение valgrind
там сказало что-то подобное, но более декорирование рассказывающего о несоответствии версии ядра: буквально
llostatic/files/valgrind <
FATAL: kernel too old
Segmentation fault
(context.getFilesDir() + File.separator + "valgrind").setExecute()
не удается по неизвестной причине
было (dumpAssetToFile("valgrind"){/* Many things suppressed here. */ argument.setExecute() /* Done wrong without a files dir path ask */}
)
Теперь valgrind
, кажется, правильно призывает к memcheck-arm-linux
, но я сделал это еще не признал это.
Даже исполнение "sh -c \"PATH=$PATH:" + getFilesDir() + File.separator + " " + getFilesDir() + File.separator + "busybox strace valgrind -v " + BINARY + " " + ARGS + " " + "2>&1\""
не делает то, что я ожидаю. Это не совсем то, что выполняется, но я выводил это на stderr.
W/System.err(6918): commandStrArr[0]: sh
W/System.err(6918): commandStrArr[1]: -c
W/System.err(6918): commandStrArr[2]: PATH=$PATH:/data/data/NAMESPACE/files/ busy
box strace valgrind -v /data/data/NAMESPACE/files/BINARY ARGS 2>&1
W/System.err(6918): strace: applet not found
W/System.err(6918): valgrind: failed to start tool 'memcheck' for platform 'arm-l
inux': No such file or directory
W/System.err(6918): Error: BINARY exited with status nonzero (1).
Мой чтения этого является то, что busybox
не может эмулировать strace
, но в любом случае выполнения в качестве команды и арг от того, что он думает, как арг [2] до конца его точки зрения аргументов. valgrind
загружается хорошо, но не может найти memcheck
. Контекстом здесь является memcheck-arm-linux
- это актив. ed статические двоичные файлы сбрасываются в каталог файлов вместе с работающими valgrind
и busybox
. Я не могу быть уверен, что memcheck-arm-linux
- это именно то, что просят, если я не могу получить трассировку системных вызовов. IMHO Это было бы, не являющееся memcheck-arm-linux
, что valgrind
звонит здесь «memcheck» для платформы «arm-linux».
Дополнительная информация (аннотация на Дов, пожалуйста):
$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for
GNU/Linux 3.2.0, stripped
[...]
$ file coregrind/valgrind
coregrind/valgrind: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically
linked, for GNU/Linux 3.2.0, not stripped
[...]
$ file memcheck/memcheck-arm-linux
memcheck/memcheck-arm-linux: ELF 32-bit LSB executable, ARM, version 1 (SYSV), st
atically linked, not stripped
Видит никто почему valgrind
кажется не будет принимать memcheck-arm-linux
как действительный memcheck
инструмент?
Это может быть проблема разрешения на выполнение и/или право собственности. Разрешения исполняемого файла должны быть прочитаны + выполнить для владельца. Не могли бы вы проверить, обеспечивает ли это установка. Запустите 'sh -c 'ls -l PATH_TO_VALGRIND", чтобы проверить, все ли в порядке. – Samveen
Несмотря на то, что методология развертывания 'valgrind' была примерно на 90% такой же, как методология развертывания« valgrind », разрешение на выполнение не было установлено, когда я искал ее через« adb shell »в эмулятор (сотовый телефон в данный момент отсутствует). Повторно проверит весь этот Java-код и вернусь, добавив больше отзывов. – uprego
Моя ошибка: теперь мой код Java исправлен, и приложение корректно выводит 'valgrind: не удалось запустить инструмент memcheck 'для платформы' arm-linux ': нет такого файла или каталога' и возвращать статус 1. Я пытался проголосовать за меня вниз. – uprego