2013-02-10 105 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

相关问题