2013-02-10 3 views
0

나는 안드로이드 애플 리케이션에서 PID에 대한 strace 명령을 exceute하고있어.안드로이드 애플 리케이션에서 Strace 명령은 빈 파일을 씁니다

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

sampleTrace11.txt 생성 된 파일 만이 비어 : 코드 세그먼트는 다음과 같습니다. 쉘 명령 프롬프트에서 같은 명령을 실행하면 파일에 데이터가 기록됩니다. 아무도 도와주세요 제발 ..

+0

'strace'의 전체 경로로 테스트 해 보셨습니까? –

+0

@sputnick'strace'가 시작되지 않으면 빈 파일을 만들지 않습니다 ('-o' 옵션이 사용됩니다, 출력 방향 재 지정 등이 아닙니다) –

+0

그러면 무엇을해야할지 알려줄 수 있습니까? – srooth

답변

0

나는 그것이 권한 관련 이길 기대합니다. 좋은 방법은 adb shellrun-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