2012-08-28 2 views
1

Eclipse, NetBeans와 같은 APKTOOL, Smali 및 IDE와 같은 도구를 사용하여 블랙 박스 테스트 APK에 대한 방법을 연구하려고합니다. 나는 내가 필요한 것을 대부분 가지고있다 - 나는 장비를 디 컴파일/디버깅/재 컴파일/서명/정렬하고 장치에서 실행할 수있다.Android 디버깅 (APK 및 waitForDebugger를 다시 설계)

문제는 디버거가 연결되면 중단 점을 설정하는 것입니다 (중단 점은 Smali 코드로 설정 됨). 중단 점이 Dalvik에 제출되지 않았거나 Dalvik이 중단 점을 존중하지 않는 것으로 보입니다. 어느 쪽이든, 프로그램이 중단 점을 발견하면 디버거가 스냅되지 않습니다. 일부 연구에 따르면 Debug.waitForDebugger이 필요할 수도 있습니다. (http://stackoverflow.com/questions/3107587/android-with-jdb-confusion-using-waitfordebugger).

waitForDebugger이 다음 장애물이라고 가정하고 로컬 스택을 조정 한 후 Smali 구문을 사용하여 invoke-static {}, Landroid/os/Debug;->waitForDebugger()V으로 삽입 할 수 있습니다.

제 질문은 waitForDebugger에 전화를 어디에 삽입합니까? 정적 생성자 (clinit), 인스턴스 생성자 (init), onCreate 또는 다른 곳에서 MainActivity (매니페스트의)을 선택해야합니까? Eclipse, NetBeans 등과 같은 IDE는 어떻게 디버그 빌드에서이 작업을 수행합니까?

+1

jdb를 사용해보십시오. 나는 방금 그것을 재빨리 시험해 보았고 안드로이드 응용 프로그램에서 휴식을 취할 수있었습니다. 낮은 수준의 "이 명령에서 중단"(줄만 표시) 또는 "이 레지스터 표시"(명명 된 지역 만) 명령을 제공하는 것 같지는 않지만. 또는 https://github.com/swdunlop/AndBug와 같은 것을 시도 할 수 있습니다. – JesusFreke

답변

1

위 질문에 대한 간단한 대답은 MainActivity.onCreate입니다. APKTOOL 버그 보고서를 디마에 의해 공급

긴 대답은 Debug.waitForDebugger가 신뢰할 수 있음을 명시하고, 디버거를 연결하는 우리는 기다리고 스핀해야

boolean debuggerAttached = false; 
while(!debuggerAttached) { ; } 

기준이 버그 리포트에 그의 대답 : NetBeans/Smali Debugging is Broken (SmaliDebugging Page)합니다.