안드로이드 개발 질문/답변
(글 수 45,052)
일단 로그부터 올립니다.
09-28 11:12:12.845: INFO/DEBUG(31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-28 11:12:12.855: INFO/DEBUG(31): Build fingerprint: 'generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys'
09-28 11:12:12.855: INFO/DEBUG(31): pid: 438, tid: 438 >>> android.app.ImageProc <<<
09-28 11:12:12.865: INFO/DEBUG(31): signal 11 (SIGSEGV), fault addr deadbaad
09-28 11:12:12.865: INFO/DEBUG(31): r0 00000000 r1 0000000c r2 00000027 r3 00000000
09-28 11:12:12.875: INFO/DEBUG(31): r4 00000000 r5 deadbaad r6 00001728 r7 40000000
09-28 11:12:12.875: INFO/DEBUG(31): r8 beb36878 r9 4104bcbc 10 0000ce04 fp 4104bcb8
09-28 11:12:12.875: INFO/DEBUG(31): ip ffffffff sp beb367e0 lr afd154c5 pc afd11dc4 cpsr 40000030
09-28 11:12:13.015: INFO/DEBUG(31): #00 pc 00011dc4 /system/lib/libc.so
09-28 11:12:13.015: INFO/DEBUG(31): #01 pc 0000be1c /system/lib/libc.so
09-28 11:12:13.015: INFO/DEBUG(31): code around pc:
09-28 11:12:13.025: INFO/DEBUG(31): afd11da4 1c2bd00b 2d00682d e026d1fb 2b0068db
09-28 11:12:13.025: INFO/DEBUG(31): afd11db4 4e17d003 51a02001 4d164798 24002227
09-28 11:12:13.035: INFO/DEBUG(31): afd11dc4 f7fb702a 2106ee14 ef10f7fc 05592380
09-28 11:12:13.035: INFO/DEBUG(31): afd11dd4 6091aa01 1c116054 94012006 eab6f7fc
09-28 11:12:13.044: INFO/DEBUG(31): afd11de4 2200a905 f7fc2002 f7fbeac2 2106ee00
09-28 11:12:13.044: INFO/DEBUG(31): code around lr:
09-28 11:12:13.054: INFO/DEBUG(31): afd154a4 b0834a0d 589c447b 26009001 686768a5
09-28 11:12:13.054: INFO/DEBUG(31): afd154b4 220ce008 2b005eab 1c28d003 47889901
09-28 11:12:13.065: INFO/DEBUG(31): afd154c4 35544306 d5f43f01 2c006824 b003d1ee
09-28 11:12:13.065: INFO/DEBUG(31): afd154d4 bdf01c30 0002ae7c 000000d4 1c0fb5f0
09-28 11:12:13.075: INFO/DEBUG(31): afd154e4 43551c3d a904b087 1c16ac01 604d9004
09-28 11:12:13.075: INFO/DEBUG(31): stack:
09-28 11:12:13.085: INFO/DEBUG(31): beb367a0 00000015
09-28 11:12:13.085: INFO/DEBUG(31): beb367a4 afd1453b /system/lib/libc.so
09-28 11:12:13.095: INFO/DEBUG(31): beb367a8 afd405a0 /system/lib/libc.so
09-28 11:12:13.095: INFO/DEBUG(31): beb367ac afd4054c /system/lib/libc.so
09-28 11:12:13.105: INFO/DEBUG(31): beb367b0 00000000
09-28 11:12:13.105: INFO/DEBUG(31): beb367b4 afd154c5 /system/lib/libc.so
09-28 11:12:13.115: INFO/DEBUG(31): beb367b8 00000080
09-28 11:12:13.125: INFO/DEBUG(31): beb367bc afd1450d /system/lib/libc.so
09-28 11:12:13.125: INFO/DEBUG(31): beb367c0 4104bcd0
09-28 11:12:13.125: INFO/DEBUG(31): beb367c4 afd40328 /system/lib/libc.so
09-28 11:12:13.135: INFO/DEBUG(31): beb367c8 00000000
09-28 11:12:13.135: INFO/DEBUG(31): beb367cc 00001728
09-28 11:12:13.135: INFO/DEBUG(31): beb367d0 40000000 /dev/ashmem/system_properties (deleted)
09-28 11:12:13.135: INFO/DEBUG(31): beb367d4 afd147ab /system/lib/libc.so
09-28 11:12:13.145: INFO/DEBUG(31): beb367d8 df002777
09-28 11:12:13.145: INFO/DEBUG(31): beb367dc e3a070ad
09-28 11:12:13.145: INFO/DEBUG(31): #00 beb367e0 428d5c39 /data/dalvik-cache/data@app@android.app.ImageProc-1.apk@classes.dex
09-28 11:12:13.145: INFO/DEBUG(31): beb367e4 afd15e19 /system/lib/libc.so
09-28 11:12:13.145: INFO/DEBUG(31): beb367e8 afd418dc /system/lib/libc.so
09-28 11:12:13.145: INFO/DEBUG(31): beb367ec afd10510 /system/lib/libc.so
09-28 11:12:13.155: INFO/DEBUG(31): beb367f0 afd40328 /system/lib/libc.so
09-28 11:12:13.155: INFO/DEBUG(31): beb367f4 fffffbdf
09-28 11:12:13.155: INFO/DEBUG(31): beb367f8 afd40328 /system/lib/libc.so
09-28 11:12:13.155: INFO/DEBUG(31): beb367fc afd41724 /system/lib/libc.so
09-28 11:12:13.165: INFO/DEBUG(31): beb36800 0000a000 [heap]
09-28 11:12:13.165: INFO/DEBUG(31): beb36804 afd0be21 /system/lib/libc.so
09-28 11:12:13.165: INFO/DEBUG(31): #01 beb36808 afd40328 /system/lib/libc.so
09-28 11:12:13.165: INFO/DEBUG(31): beb3680c afd0be21 /system/lib/libc.so
09-28 11:12:13.165: INFO/DEBUG(31): beb36810 41256bb8 /dev/ashmem/dalvik-LinearAlloc (deleted)
09-28 11:12:13.175: INFO/DEBUG(31): beb36814 00000374
09-28 11:12:13.175: INFO/DEBUG(31): beb36818 0000ce04 [heap]
09-28 11:12:13.185: INFO/DEBUG(31): beb3681c afd0be39 /system/lib/libc.so
09-28 11:12:13.185: INFO/DEBUG(31): beb36820 00000000
09-28 11:12:13.185: INFO/DEBUG(31): beb36824 afd103f0 /system/lib/libc.so
09-28 11:12:13.185: INFO/DEBUG(31): beb36828 000013fc
09-28 11:12:13.185: INFO/DEBUG(31): beb3682c 000000dc
09-28 11:12:13.194: INFO/DEBUG(31): beb36830 000013fc
09-28 11:12:13.194: INFO/DEBUG(31): beb36834 8090688c /data/data/android.app.ImageProc/lib/libImageProcessing.so
09-28 11:12:13.194: INFO/DEBUG(31): beb36838 00000007
09-28 11:12:13.194: INFO/DEBUG(31): beb3683c 428d6053 /data/dalvik-cache/data@app@android.app.ImageProc-1.apk@classes.dex
09-28 11:12:13.204: INFO/DEBUG(31): beb36840 4104bcc4
09-28 11:12:13.204: INFO/DEBUG(31): beb36844 afd0cd81 /system/lib/libc.so
09-28 11:12:13.215: INFO/DEBUG(31): beb36848 8090688c /data/data/android.app.ImageProc/lib/libImageProcessing.so
09-28 11:12:13.215: INFO/DEBUG(31): beb3684c 809027bb /data/data/android.app.ImageProc/lib/libImageProcessing.so
09-28 11:12:14.015: DEBUG/Zygote(33): Process 438 terminated by signal (11)
앞서 올렸던 글에 리플달아주신분께서
log를 보고 에러가 난 주소값을 gdb에서 list 때리면 문제가 된 소스가 나온다고 하셔서
gdb에 매달렸는데요-
위에 로그에 나온
09-28 11:12:12.865: INFO/DEBUG(31): signal 11 (SIGSEGV), fault addr deadbaad
를 보고 gdb에서 list *0xdeadbaad 해도
No source file for address 0xdeadbaad. 라고만 나와서요..
위에 로그보고 의심가는 (제가 만든게 libImageProcessing.so 니까, 그 옆에 나와있는 주소같은 것들) 주소들은
다 쳐봤는데 맨 마지막에 나온 809027bb 외에는 다 똑같이 나오더라구요.
맨 마지막 줄 치면 어떤 코드가 나오는데, 그 중에 가운데 있는 줄이
tIdxList = (int *)malloc(mLTIndex * sizeof(int)); 인데..
그러면 이게 메모리 할당하다가 죽는건지요.. ㅠ
로그를 보고 어떻게 분석해야하는건지 일러주시면 감사하겠습니다.
참고할만한 링크나 서적을 알려주시면 더더욱 감사하구요 ^^;
--------------------------------------------------------------------------------------------------------------------------------------------
음. 그리고 며칠전부터 질문드렸던건데요, 이게 계속 하다보니까 에러나는 위치가 달라지더라구요;;
원래 똑같은 에러가 발생하던 곳보다 더 앞에서 이런 에러가 또 발생하네요. (위에 로그 말하는거예요.)
음.. 지금은 ndk-gdb 를 이용해보려고 하는데요~
android-ndk-r4b/doc/ndk-gdb.txt 보고 따라해서 gdb 프롬프트까지 띄운 상태입니다.
ndk-gdb가 실행되면
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
warning: shared library handler faild to enable breakpoint
0x80901e12 in Java_android_app_ImageProc_InterfaceJNI_MakeLabelTable(
env = 0xaa50, thiz=0x43e2e9f8)
at /cygdrive/c/sunmin/workspace/ImageProc/jni/InterfaceJNI.c:206
206 if(pix[0] == jBLACK){
(gdb)
이런 상태인데요..
실행할 때마다 멈추는것도 저 줄 근처에서 조금씩 달라지구요;;
지금 ndk-gdb 띄운 상태가 잘못 된건 아닌지..
그냥 break 걸고 변수 보면서 아무 기본적인 수준의 debugging은 할 줄 아는데요.
break 걸고 continue 하면서 display 나 print 는 다 되는데,
현재 실행하고있는 native code의 함수를 return 하면
Cannot access memory at address 0x0
이라고 뜨면서 죽어버리네요..
다른 함수도 실행하면서 안되는걸 봐야하는건데..
전역변수 포인터에 메모리 할당한 배열에 들어있는 값이 제가 생각했던거랑 완전 다르기도 하구요;;
흐음. 기초도 부족한데 너무 어려운데 뛰어들었나 하는 생각만 자꾸 드는 요즘이네요. ㅠ
읽어주셔서 감사합니다.
2010.09.28 20:54:04
아.. 그렇군요. ㅠ
음. 근데 다시 실행했더니요,
09-28 11:39:36.785: DEBUG/dalvikvm(670): Trying to load lib /data/data/android.app.ImageProc/lib/libImageProcessing.so 0x43e37a58
09-28 11:39:36.795: DEBUG/dalvikvm(670): Added shared lib /data/data/android.app.ImageProc/lib/libImageProcessing.so 0x43e37a58
09-28 11:39:36.795: DEBUG/dalvikvm(670): No JNI_OnLoad found in /data/data/android.app.ImageProc/lib/libImageProcessing.so 0x43e37a58, skipping init
이렇게 나오고 아래에
09-28 11:39:38.504: INFO/DEBUG(31): beb368b0 80906884 /data/data/android.app.ImageProc/lib/libImageProcessing.so
09-28 11:39:38.504: INFO/DEBUG(31): beb368b4 8090269f /data/data/android.app.ImageProc/lib/libImageProcessing.so
이런 줄을 찾을 수 있었는데요, 0x43e37a58 가 오프셋이 되니까 0x80906884 에서 빼야된다는 말씀이신지요a
더해도 보고 빼보기도 했는데 계속
No source file for address 0x ~
라고만 나와서요... ㅠㅠ
아 그리고 이렇게 로그보고 어디가 실제로 문제가 되는건지는 어떻게 공부하신건지.. ^^;
음. 근데 다시 실행했더니요,
09-28 11:39:36.785: DEBUG/dalvikvm(670): Trying to load lib /data/data/android.app.ImageProc/lib/libImageProcessing.so 0x43e37a58
09-28 11:39:36.795: DEBUG/dalvikvm(670): Added shared lib /data/data/android.app.ImageProc/lib/libImageProcessing.so 0x43e37a58
09-28 11:39:36.795: DEBUG/dalvikvm(670): No JNI_OnLoad found in /data/data/android.app.ImageProc/lib/libImageProcessing.so 0x43e37a58, skipping init
이렇게 나오고 아래에
09-28 11:39:38.504: INFO/DEBUG(31): beb368b0 80906884 /data/data/android.app.ImageProc/lib/libImageProcessing.so
09-28 11:39:38.504: INFO/DEBUG(31): beb368b4 8090269f /data/data/android.app.ImageProc/lib/libImageProcessing.so
이런 줄을 찾을 수 있었는데요, 0x43e37a58 가 오프셋이 되니까 0x80906884 에서 빼야된다는 말씀이신지요a
더해도 보고 빼보기도 했는데 계속
No source file for address 0x ~
라고만 나와서요... ㅠㅠ
아 그리고 이렇게 로그보고 어디가 실제로 문제가 되는건지는 어떻게 공부하신건지.. ^^;
2010.09.29 02:27:58
에고;; 자문자답입니다. ㅠ
결국 이리저리 보다가 해결했는데요~
segmentation fault가 초기화 안된 포인터를 free 시켜줄때도 발생하는줄은 이번에 알았네요 ㅠㅠ (너무 기초적인건가요? ^^;;)
로그 가장 아랫줄, 0x8090269f 를 쳐서 나온 코드가 결국 문제가 되는 것이 맞았어요;;
제 코드에서는 gdb) list *0x8090269f 해서 나온 코드에
if(!tIdxList) free(tIdxList); 가 있었거든요;;
혹시나 저처럼 고생하는분이 있을까......해서 올려요 ^^;;;
8090688c 이 주소를 실제 소스가 나올만한 주소로 바꿔야 하는게 일인데요...
실행할때 로그를 잘 보면 so파일이 어떤 주소에 올라가는지 나옵니다. 그게 offset이 되니까 뺄셈하시면 됩니다.
근데 가끔 잘 안맞기도 하는데 이유는 잘 모르겠어요... ㅡㅡㅋ