2013-02-10 57 views
0

我試圖從Android應用程序中優化strace命令的PID。代碼段如下:來自Android應用程序的Strace命令寫入空文件

Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt"); 

文件sampleTrace11.txt被創建,但它是空的。當我從shell命令提示符執行相同的命令時,文件被寫入數據。任何人都可以請幫我..

+0

你測試過'strace'的完整路徑嗎? – 2013-02-10 16:58:13

+0

@sputnick如果'strace'沒有啓動,它不會創建一個空文件(請注意,使用'-o'選項,而不是輸出重定向或類似的東西) – 2013-02-10 17:19:48

+0

你能告訴我該怎麼做嗎? – srooth 2013-02-10 17:35:13

回答

0

我期望它的權限相關。一個好方法是從adb shell使用run-as。例如,假設您的應用程序是com.srooth.fancyapp,這樣做:

adb shell run-as com.srooth.fancyapp strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt

如果這不起作用,你知道這是什麼做的com.srooth.fancyapp的權限,你可以期望得到時相同的結果從Java內運行。

一些可能的權限問題:

  • 您的應用程序沒有權限寫入SD卡。這種能力將通過運行爲您的用戶的所有其他應用程序可以繼承的,因此,以確保您AndroidManifest.xml指定的權限是很重要的:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  • 如果有問題的過程中是不是你的應用程序的一部分,它會作爲不同的用戶運行。因此,您的應用程序將無權檢查它。除了使用固定電話並將su -c添加到您的命令行之外,您無能爲力。

一對夫婦的其他想法:

  • 嘗試啓動這個過程,而不是連接到它,如果你能。這應該沒有什麼區別,但可以幫助您調試問題。
  • 而不是使用Runtime.getRuntime().exec(),嘗試使用ProcessBuilder類。直到進程完成

  • 看看它的標準輸出
  • 看它的標準誤差
  • 獲取它的返回碼

    • 等待:這將使你做的有益的事情各種各樣。
+0

感謝您回覆Adrian ...似乎它與您指出的內容有關...它對主應用程序的processId(寫代碼的應用程序)工作正常。但是,當它試圖strace任何其他應用程序,問題出現......我正在使用模擬器,它的根源..我嘗試與su -c選項也,但不工作:( – srooth 2013-02-12 20:12:14

相關問題