2011-05-05 1 views
43

Android NDK (Windows XP, Cygwin에서)를 사용하여 원시 코드에 대해 Eclipse에서 디버깅을 설정하고 자바와 네이티브 코드 모두에서 중단 점을 설정할 수 있으며 디버거가 올바르게 중단됩니다. 내 문제는 네이티브 코드를 단계별로 실행할 때 종종 중단 점을 지나칠 때 발생하지 않는 세그멘테이션 오류/SIGILL이 발생한다는 것입니다. AndroidManifest.xml에에 정의 된Eclipse에서 Android NDK 디버깅 - 원시 코드를 실행할 때만 발생하는 segfaults/SIGILL을 중지하는 방법

  • 내 응용 프로그램 디버깅입니다 APP_OPTIM 디버그로 정의 할 때 내가 디버그 기호를 제거에서 그것을 방지하기 위해 (NDK) /build/core/build-binary.mk을 변경 한
  • 개별적으로

나는이 문제 읽었습니다 그것은 내가 Android.mk 파일에 LOCAL_CFLAGS := -g -O0을 정의

  • 내 JNI 디렉토리에 Application.mk 파일에, 나는 이러한 플래그의 각을 시도하는 최적화 된 코드 장군과 관련이있다. ted이지만 -O0으로 최적화를 해제해도 내 문제에는 영향을주지 않습니다. 빌드 할 때 NDK_BUILD=1 플래그를 사용하여 건너 왔지만, AndroidManifest.xml에서 debuggable=true을 정의하는 것은 분명히 동일한 효과가 있습니다.

    나는 에뮬레이터 (2.3.3 실행)와 장치 (2.2 실행 - 당연히 예상했던 스레드 문제가 없었 음)에서 이와 비슷한 결과를 얻었습니다. (정확하게 기억한다면 코드의 다른 지점에서 오류가 발생했습니다).

    누구나 시도 할 수있는 가능한 수정/단계에 대한 통찰력이 있습니까? 그리고/또는 문제없이 원시 코드를 성공적으로 실행할 수 있습니까?

    정말 감사합니다


    편집 :이 정말 해결되지 않았다,하지만 NDK 디버깅을 위해 나의 가이드를 살펴 원하는 사람을 위해, 당신이 그것을 here을 찾을 수 있습니다.

    편집 2 : 편집이 질문에 대한 답변은 NDK의 새 버전이 나오면 나왔습니다.이 질문은 현재 중복 될 수 있습니다. 내 가이드는 여전히 작동 할 수 있지만 잠시 동안 NDK를 사용하지 않아서 계속해서 정확성을 보장 할 수는 없습니다. 세 사람 모두 기본적으로 똑같은 말을했기 때문에 나는 대답을 받아 들였습니다. 그리고 그것은 처음 제출 된 것입니다.

  • +1

    안녕하세요. 네이티브 디버깅이 올바르게 작동하도록 할 수 있었습니까? 웬일인지 나는 네이티브 함수 (F5)에 들어갈 수 없다. –

    +1

    @Kevin 안녕하세요. 내가 링크 된 가이드는 NDK 디버깅을 작동 상태로 설정합니다.그러나 말했듯이, JNI를 "통해"스테핑을 처리하지 않습니다. 그러나 Java와 C/C++에서 설정된 중단 점을 처리하므로 NDK에서 호출하는 C/C++ 함수의 진입 점에 중단 점을 설정하고 원하는 중단 점에 계속 (F8) 네이티브 코드로 이동합니다. 희망이 도움이됩니다. –

    +0

    고마워요! 그렇습니다. –

    답변

    2

    armeabi에서는 작동하지만 armeabi-v7a에서는 작동하지 않는 경우 빌드 문제가되어야합니다. bin 디렉토리에있는 apk 파일의 압축을 풀고 armeabi와 armeabi-v7a의 라이브러리 파일이 같은지 확인하십시오.

    0

    내가 눈치 챘을 한 가지는 armeabi-v7a가 특정 장치에서 원시 코드를 디버깅하는 데 적합하지 않다는 점입니다. armeabi 만 빌드하고 도움이되는지 확인하십시오.

    0

    가 사용 된 경우 확인 mm의 -B의 showcommands를 -march = ARMV4 넣고 할 yourarch.mk/빌드/코어/콤보/팔에서

    ARMV4 -march =와 C++ 소스 파일을 컴파일합니다.

    그러면 gdbserver에서 처리 할 수 ​​있습니다.