来自Android应用程序的Strace命令会写入空文件

时间:2013-02-10 16:47:25

标签: android shell strace

我正试图从Android应用程序中获取一个PID的strace命令。代码段如下:

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

创建了文件 sampleTrace11.txt 但它是空的。当我从shell命令提示符执行相同的命令时,文件将写入数据。任何人都可以帮助我..

1 个答案:

答案 0 :(得分:0)

我希望它与权限相关。一个好方法是使用run-as中的adb shell。例如,假设您的应用程序为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" />

  • 如果相关流程不属于您的应用程序,则会以其他用户身份运行。因此,您的申请将无权检查它。除了使用root电话并将su -c添加到命令行之外,你无能为力。

其他一些想法:

  • 如果可以的话,尝试启动该过程而不是附加到该过程。这应该没有任何区别,但可以帮助您调试问题。
  • 请尝试使用Runtime.getRuntime().exec()类,而不是使用ProcessBuilder。这将使您能够做各种有用的事情:

    • 等到流程完成
    • 查看其标准输出
    • 查看其标准错误
    • 获取其返回码。