java - index - android ndk r5c



Eclipse에서 JNI로 래핑 된 C 코드를 효과적으로 디버깅하려면 어떻게해야합니까?(Android Dev) (2)

나는 segfault를 가지고있다. 그러나 나는 그것을 어떻게 찾아야할지 전혀 모른다.

팁?


Answer #1

Eclipse에서 Android JNI C / C ++ 코드를 효과적으로 디버깅하는 방법 :

  1. 혼합 Java, C 및 C ++ 프로젝트로 프로젝트를 설정하십시오.

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

  2. 디버깅을 사용하도록 프로젝트를 설정하십시오.

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/#more-23

참고 : 사이트 작성자는 우분투에서 Eclipse (Galileo)를 사용했습니다. MacOS에서 Eclipse (Helios)를 사용할 때 (특히 디버그 설정과 함께) 몇 가지 차이점을 발견했습니다. 일단 일이 설정되면 Eclipse는 JNI 개발을위한 IDE로 잘 작동합니다.


Answer #2

Android NDK Stacktrace Analyzer를 사용하여 충돌을 일으킨 C 함수의 위치를 ​​가져올 수 있습니다.

위키 에 단계가 있지만 기본적으로 스택 추적을 logcat에서 파일 ( adb logcat > mycrash.log )로 가져온 다음 라이브러리를 텍스트 파일로 덤프 한 다음 두 파일에서 프로그램을 실행해야합니다. 다음은 제가 많이 사용하는 쉘 스크립트입니다 :

#!/bin/sh
if test $# -lt 2 ; then
    echo "Extract readable stack trace from Android logcat crash"
    echo "Usage $0 lib.so crash.log"
    exit 1
fi
of=$(mktemp)
echo "Disassemble $1"
~/tools/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-objdump -S $1 > $of
echo "Parse stack trace in $2"
~/bin/parse_stack.py $of $2

필요에 따라 Android NDK 및 parse_stack.py 파일의 경로를 변경합니다.





android-ndk