Wątek przeniesiony 2014-09-01 12:41 z Newbie przez bogdans.

Valgrind nie może stworzyć plików tymczasowych

0

Siema.
Próbuje odpalić valgrindem aplikację na androidzie, ale dostaje takie komunikaty

 08-28 15:20:42.990: I/dalvikvm(25599): Exec: /system/bin/sh -c logwrapper sh /data/local/start_valgrind.sh /system/bin/app_process /system/bin --application '--nice-name=com.Claw.Circle' com.android.internal.os.WrapperInit 28 7 'android.app.ActivityThread'
08-28 15:20:43.010: I/sh(25611): /data/local/start_valgrind.sh[2]: 
08-28 15:20:43.010: I/sh(25611): /data/local/start_valgrind.sh[4]: 
08-28 15:20:43.010: I/sh(25611): /data/local/start_valgrind.sh[7]: 
08-28 15:20:43.010: I/sh(25611): /data/local/start_valgrind.sh[10]: 
08-28 15:20:43.010: I/sh(25611): /data/local/start_valgrind.sh[12]: 
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): ==25612== VG_(mkstemp): failed to create temp file: /data/data/com.Claw.Circle
08-28 15:20:43.020: I/sh(25611): valgrind: Startup or configuration error:
08-28 15:20:43.020: I/sh(25611): valgrind:    Can't create client cmdline file in 
08-28 15:20:43.030: I/sh(25611): valgrind: Unable to start up properly.  Giving up.
08-28 15:20:43.030: I/logwrapper(25611): sh terminated by exit(1)

Co do aplikacji to jest to przykładowa HelloJni z paczki NDK, a skrypty są niemal identyczne jak w tym poście http://stackoverflow.com/a/19235439/3975769

0
  1. zdecydowanie to nie jest problem typu Newbie
  2. po co ci valgrind? Jakich błędów szukasz?
0

Może upewnij się, że jest utworzony katalog "/data/data/com.Claw.Circle" a jeśli jest to sprawdź jakie ma atrybuty i do jakiej grupy należy.

0

Ok poradziłem sobie chyba. wystarczyło w skrypcie zakomentować ten export TMPDIR=... i usunąć ' z VGPARAMS

--EDIT--
Ok, usuwanie ' chyba jednak nie było dobrym pomysłem, ale jak to zostawie to wyrzuca mi

08-29 11:32:58.370: I/sh(6127): valgrind: Bad option: --show-reachable=yes
08-29 11:32:58.370: I/sh(6127): valgrind: Invalid boolean value 'yes

show-reachable to ostatni parametr, a bez ' nie czyta już od drugiego parametru.

0

Pokaz zawartość skryptu.
Co ci drukuje

ls -al /data/data/com.Claw.Circle

Niepokoi mnie też to, że w błędzie masz tylko "/data/data/com.Claw.Circle", a to jest katalog a nie plik, oczekiwałbym raczej że to będzie to raczej coś w stylu: "/data/data/com.Claw.Circle/valgrind_proc_30533_cmdline_86662832"

Zainteresuj się też, Address Sanitizer, jest to lepsze rozwiązanie niż valgrind, a z tego co widziałem w internecie można zaleźć instrukcję dla androida.

0
#!/system/bin/sh

PACKAGE="com.Claw.Circle"

# Callgrind tool
#VGPARAMS=-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=callgrind --callgrind-out-file=/sdcard/callgrind.out.%p

# Memcheck tool
VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=memcheck --leak-check=full --show-reachable=yes'

export TMPDIR=/data/data/$PACKAGE
echo $VGPARAMS
exec /data/local/Inst/bin/valgrind $VGPARAMS $* 
 @echo off
set PACKAGE=com.Claw.Circle
:: Memcheck tool
::set VGPARAMS=-v --error-limit=no --leak-check=full
adb push start_valgrind.sh /data/local/
adb shell chmod 777 /data/local/start_valgrind.sh

adb root
adb shell setprop wrap.%PACKAGE% "logwrapper sh /data/local/start_valgrind.sh"
::adb shell setprop wrap.%PACKAGE% "logwrapper /data/local/Inst/bin/valgrind %VGPARAMS%"
adb shell am force-stop %PACKAGE%
adb shell am start -a android.intent.action.MAIN -n %PACKAGE%/com.Claw.Android.ClawRootActivity

root@android:/ # ls -al /data/data/com.Claw.Circle
ls -al /data/data/com.Claw.Circle
drwxrwx--x u0_a64   u0_a64            2014-08-27 10:20 cache
drwxrwx--x u0_a64   u0_a64            2014-08-27 10:20 files
lrwxrwxrwx install  install           2014-08-29 11:03 lib -> /data/app-lib/com.
Claw.Circle-2

Jak w tym drugim skrypcie odkomentuje VGPARAMS i adb shell setprop wrap.%PACKAGE% "logwrapper /data/local/Inst/bin/valgrind %VGPARAMS%" zamiast "logwrapper sh /data/local/start_valgrind.sh" to będzie działać, ale wartość setprop może mieć maksymalnie 91 znaków, czyli na same VGPARAMS zostaje 50, więc trzeba użyć skryptu, chyba że jest jakiś lepszy sposób na ominięcie tego.

0

Ok, już wiem co było nie tak. Wystarczyło do drugiego skryptu dodaćdos2unix start_valgrind.sh

1 użytkowników online, w tym zalogowanych: 0, gości: 1