안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요
간단하게 jni로 단말 정보를 얻어오고 있습니다.
일단 리눅스 서버에서 함수 동작하는 것은 확인 했고요.
그 함수를 jni로 만들어서 어플리케이션에서 사용을 하려고 하는데..
결과 값이 이상하게 나오더라구요..
그래서 디버깅을 하고 싶으나, jni로 만든 so 파일에 대한 디버깅을 어떻게 해야 하는지 막막하더라구요.
혹시 jni로 만든 소스 파일부분을 디버깅 하는 방법 아시는 분 계신가요?
2010.09.15 14:09:44
흠.... 이거 알게되시면 그냥 gdb 쓰고 만다... 라고 하실지도 모르는데 ㅋㅋ
손은 무쟈게 많이가고 속도는 느리고.... 차라리 gdb 계속 쓰시는게 건강에 좋습니다.
일반적인 gdb를 이클립스에 연결하는 방법을 일단 찾아보시구요...
그담에 안드로이드에 응용해야 되는데 응용절차가 캐복잡합니다.
c단에 브렉포인트 잡으려면 일단 자바 소스에 브렉을 걸어야 됩니다.
자바소스를 디버그모드로 실행하믄 브렉이 걸릴텐데요.
여기서 에뮬상의 gdbserver를 실행시킵니다. (실단말에서는 권한땜시 안될겁니다. 루팅되면 될라나)
gdbserver의 포트포워딩도 하구요...
그담에 c소스 디버거를 실행합니다. (이거 만드는게 핵심이긴 한데 말로 다 설명하긴 빡셉니다. ㅠ.ㅠ)
이게 뜨는데 한세월입니다. 뜨고나면 자바소스 Continue....
그러면 C쪽에 브렉 걸립니다.
제가 알기로 nvidia에서 문서가 나왔던걸로 아는데...
(제가 한창 이문제로 고민하기 시작할때는 없다가 다 찾고 나니까 그 중간에 발표된 문서가....
저 이거 하는데 한달걸렸거든요 ㅡㅡㅋ)
거기서 gdbserver받아서 쓰지 마시고 안드로이드에 있는걸로 쓰면 되는걸로압니다.
손은 무쟈게 많이가고 속도는 느리고.... 차라리 gdb 계속 쓰시는게 건강에 좋습니다.
일반적인 gdb를 이클립스에 연결하는 방법을 일단 찾아보시구요...
그담에 안드로이드에 응용해야 되는데 응용절차가 캐복잡합니다.
c단에 브렉포인트 잡으려면 일단 자바 소스에 브렉을 걸어야 됩니다.
자바소스를 디버그모드로 실행하믄 브렉이 걸릴텐데요.
여기서 에뮬상의 gdbserver를 실행시킵니다. (실단말에서는 권한땜시 안될겁니다. 루팅되면 될라나)
gdbserver의 포트포워딩도 하구요...
그담에 c소스 디버거를 실행합니다. (이거 만드는게 핵심이긴 한데 말로 다 설명하긴 빡셉니다. ㅠ.ㅠ)
이게 뜨는데 한세월입니다. 뜨고나면 자바소스 Continue....
그러면 C쪽에 브렉 걸립니다.
제가 알기로 nvidia에서 문서가 나왔던걸로 아는데...
(제가 한창 이문제로 고민하기 시작할때는 없다가 다 찾고 나니까 그 중간에 발표된 문서가....
저 이거 하는데 한달걸렸거든요 ㅡㅡㅋ)
거기서 gdbserver받아서 쓰지 마시고 안드로이드에 있는걸로 쓰면 되는걸로압니다.
set solib-search-path [안드로이드 Full 소스 Root]/out/target/product/generic/symbols/system/lib
set solib-search-path /home/andro/android_source_v2.1/out/target/product/generic/symbols/system/lib
제가 정리한 문서를 붙인겁니다.
프로요 나오기 전에 NDK(이게 4던가 5던가...)로 했었습니다.