2011-05-06 7 views

답변

4

루팅 된 장치 또는 에뮬레이터에서 gdb를 zygote에 연결하고 새로 fork 된 프로세스가 시작될 응용 프로그램의 ID를 가정 할 때 바로 중단 점을 지정할 수 있습니다.

zygote를 수정하여 디버거가 연결될 때까지 기다리는 것이 가장 쉽습니다. Jdwp 디버깅 시스템에는 Java 코드 작성기 초기에 Java 디버거를 넣을 수있는 코드가 있지만, 이미 내장 된 gdb에 필적 할만한 기능이 없다는 것을 알고 있습니다. 기다릴 수는 있지만 jdwp의 경우, 그리고 자바 디버거를 연결 (및 분리)하기 전에 gdb를 첨부하십시오.

업데이트 : gdb로 zygote에 연결하고 초기에 자식에 의해 실행되는 코드 한 단어를 수정하여 무한 루프로 이동 한 다음 zygote에서 분리합니다. 나는 'ps'에 나타나 자마자 새로운 자식을 gdb로 만들고 계속해서 복구 할 수 있다고 생각했습니다. 문제는 입력 된 모든 명령을 얻을 수있는 것보다 아이가 더 빨리 죽었다는 것입니다 (아마도 반응이 없음). 그래서 그것은 프로그램에 의해 완료되어야 할 것입니다. 그리고 일찍 멈추지 않고 죽임을당하는 일이 그리 많지 않을 수도 있습니다. 아마도 거기에 strace를 넣을 수는 있지만, 소스를 읽지 못한다는 것을 배우기를 희망합니까?

2

OMAPpedia의 Android Debugging 페이지에는 gdbclient 사용에 대한 개요가 있습니다.

gdbclient <executable name> <port number> <task name> 
  • 실행 파일 이름 : 기본값은 다음과 같습니다 : 5039 (수 전에 결장 필요)
  • 작업 이름 : 얻을 디렉토리
  • 포트 번호 시스템/빈에서 파일 이름 대상에서 "ps"를 실행합니다. GDB는이를 사용하여 PID를 내부적으로 식별합니다.

당신은 adb 처음으로 앞으로 포트 설정과 같이해야합니다 :

adb forward tcp:5039 tcp:5039 
관련 문제