2012-02-03 76 views
24

我一直在尋找上週試圖找到這個問題的答案。如何用valgrind啓動一個android應用程序

如何使用valgrind啓動Android應用程序?我知道我可以用'am'命令啓動一個應用程序,但它會啓動應用程序並退出。

我在寫一個應用程序,它使用NDK作爲本地C代碼,我需要檢查它是否有可疑的內存錯誤。

編輯:

我學到了一點點。你可以用一個shell腳本「包裝」一個應用程序。

下面是我使用的shell腳本:

#!/system/bin/sh 
VGPARAMS='--error-limit=no' 
export TMPDIR=/data/data/com.starlon.froyvisuals 
exec /data/local/Inst/bin/valgrind $VGPARAMS $* 

而這裏的setprop:

adb shell setprop wrap.com.starlon.froyvisuals "logwrapper valgrind" 

這裏就是我如何啓動應用程序:

adb shell am start -n com.starlon.froyvisuals/.FroyVisuals 

我不認爲這是對的,因爲我不確定shell腳本在哪裏,我沒有看到任何logcat。任何提示?

編輯2: 哦,shell腳本在上面用「setprop」命令表示。所以

adb shell setprop wrap.com.starlon.froyvisuals "logwrapper /data/local/val.sh" 

我仍然沒有看到任何logcat。

+1

對於如何通過Valgrind的運行你的應用程序看到我的腳本:http://stackoverflow.com/a/19235439/313113 – bitek 2013-10-08 18:24:24

回答

6

你可以嘗試清除logcat的第一

prompt# adb logcat -c 
prompt# adb logcat 

你應該能夠看到日誌進來,一旦你觸發了您的應用程序。

am start -a android.intent.action.MAIN -n com.example.hellojni/.HelloJni 

我的shell腳本有問題,我用它來代替。

adb shell setprop wrap.com.example.hellojni "logwrapper /data/local/Inst/bin/valgrind" 

你應該能夠在參數傳遞的valgrind

-1

是後對的,但你應該使用

亞行外殼setprop wrap.com.example.hellojni「logwrapper ./ data/local/Inst/bin/valgrind「
/\ ---- for shell(。)很重要!!!

另外,如果你想使用的Valgrind的工具的一些配置 - 使用這個:

亞行外殼setprop wrap.com.example.hellojni「logwrapper ./data/local/Inst/bin/valgrind --tool = massif(... configure massif atc ...)「

1

我也遇到過這個問題。在我的情況下,我編輯了「val。sh「在窗口& adb將它推到模擬器,但shell腳本不能正確執行,然後我使用回聲」*「> val.sh風格使」val.sh「,它運作良好。

所以,你應該首先確認「val.sh」可以正確地解釋

相關問題