2012-03-30 2 views
2

Android 용 소스 코드가 많은 라이브러리를 구축하고 있습니다. 라이브러리는 Linux x86 용으로 컴파일 된 경우 제대로 작동합니다. 독립형 도구 체인으로 구축하고 있습니다. 이전에 다른 라이브러리에서이 작업을 성공 시켰기 때문에 설치가 잘 된 것 같습니다. 어쨌든, 컴파일 링과 링크는 모두 좋지만 결과 공유 라이브러리를로드 할 때 SEGV를 얻습니다. 내가하면 addr2line를 사용하는 경우 나는이 정보를 얻을SEGV 문제를 디버깅하는 데 도움이 필요합니다. - Android NDK

03-23 23:37:14.213: I/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
03-23 23:37:14.213: I/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys' 
03-23 23:37:14.224: I/DEBUG(28): pid: 332, tid: 332 >>> com.example.hellojni <<< 
03-23 23:37:14.224: I/DEBUG(28): signal 11 (SIGSEGV), fault addr 00000000 
03-23 23:37:14.224: I/DEBUG(28): r0 00000000 r1 00000000 r2 80808080 r3 00000000 
03-23 23:37:14.224: I/DEBUG(28): r4 00000000 r5 bea8154c r6 bea81600 r7 00000000 
03-23 23:37:14.224: I/DEBUG(28): r8 bea81820 r9 41971894 10 00000354 fp bea814fc 
03-23 23:37:14.224: I/DEBUG(28): ip 80a81058 sp bea814c0 lr 80a63cd8 pc afe0e7c8 cpsr 40000010 
03-23 23:37:14.313: I/DEBUG(28):   #00 pc 0000e7c8 /system/lib/libc.so 
03-23 23:37:14.313: I/DEBUG(28):   #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so 
03-23 23:37:14.323: I/DEBUG(28): code around pc: 
03-23 23:37:14.323: I/DEBUG(28): afe0e7b8 e31c0003 1afffff6 e1a00002 e59f20d8 
03-23 23:37:14.323: I/DEBUG(28): afe0e7c8 e490c004 e0433000 f5d0f040 e04c13a2 
03-23 23:37:14.323: I/DEBUG(28): afe0e7d8 e0011002 e1d1100c 0490c004 1a000022 
03-23 23:37:14.323: I/DEBUG(28): code around lr: 
03-23 23:37:14.323: I/DEBUG(28): 80a63cc8 e1a05000 e1a00001 e1a04001 ebff27d0 
03-23 23:37:14.323: I/DEBUG(28): 80a63cd8 e1a01004 e1a02000 e1a00005 e8bd4070 
03-23 23:37:14.323: I/DEBUG(28): 80a63ce8 eaffffa0 e590c000 e92d45f0 e51ce00c 
03-23 23:37:14.323: I/DEBUG(28): stack: 
03-23 23:37:14.323: I/DEBUG(28):  bea81480 001479d0 [heap] 
03-23 23:37:14.323: I/DEBUG(28):  bea81484 bea81820 [stack] 
03-23 23:37:14.323: I/DEBUG(28):  bea81488 41971894 /dev/ashmem/dalvik-LinearAlloc (deleted) 
03-23 23:37:14.323: I/DEBUG(28):  bea8148c 00000354 
03-23 23:37:14.334: I/DEBUG(28):  bea81490 bea814fc [stack] 
03-23 23:37:14.334: I/DEBUG(28):  bea81494 00147a24 [heap] 
03-23 23:37:14.334: I/DEBUG(28):  bea81498 00000006 
03-23 23:37:14.334: I/DEBUG(28):  bea8149c 80a63b58 /data/data/com.example.hellojni/lib/libgnustl_shared.so 
03-23 23:37:14.334: I/DEBUG(28):  bea814a0 00000006 
03-23 23:37:14.334: I/DEBUG(28):  bea814a4 bea81548 [stack] 
03-23 23:37:14.334: I/DEBUG(28):  bea814a8 80a82110 
03-23 23:37:14.334: I/DEBUG(28):  bea814ac 00000000 
03-23 23:37:14.334: I/DEBUG(28):  bea814b0 bea81820 [stack] 
03-23 23:37:14.334: I/DEBUG(28):  bea814b4 80a63bcc /data/data/com.example.hellojni/lib/libgnustl_shared.so 
03-23 23:37:14.334: I/DEBUG(28):  bea814b8 df002777 
03-23 23:37:14.334: I/DEBUG(28):  bea814bc e3a070ad 
03-23 23:37:14.344: I/DEBUG(28): #00 bea814c0 bea814d4 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814c4 00000000 
03-23 23:37:14.344: I/DEBUG(28): #01 bea814c8 bea81548 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814cc bea81548 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814d0 bea81600 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814d4 8131f228 /data/data/com.example.hellojni/lib/libsharedB.so 
03-23 23:37:14.344: I/DEBUG(28):  bea814d8 afe39190 /system/lib/libc.so 
03-23 23:37:14.344: I/DEBUG(28):  bea814dc bea8152c [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814e0 001479a0 [heap] 
03-23 23:37:14.344: I/DEBUG(28):  bea814e4 bea81548 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814e8 80a8211c 
03-23 23:37:14.344: I/DEBUG(28):  bea814ec 001479a0 [heap] 
03-23 23:37:14.344: I/DEBUG(28):  bea814f0 bea81548 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814f4 bea81548 [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814f8 bea8151c [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea814fc 8131eb8c /data/data/com.example.hellojni/lib/libsharedB.so 
03-23 23:37:14.344: I/DEBUG(28):  bea81500 bea8152c [stack] 
03-23 23:37:14.344: I/DEBUG(28):  bea81504 0000272e 
03-23 23:37:14.344: I/DEBUG(28):  bea81508 80a82124 
03-23 23:37:14.344: I/DEBUG(28):  bea8150c 80a8211c 
03-23 23:37:14.884: D/Zygote(30): Process 332 terminated by signal (11) 
03-23 23:37:14.893: I/ActivityManager(52): Process com.example.hellojni (pid 332) has died. 
03-23 23:37:14.966: I/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in com.example.hellojni 

: 이것은 내가 얻을 추적이다

android-linux-addr2line.exe -C -f -e libc.so 0000e7c8 
strlen 
??:0 

android-linux-addr2line.exe -C -f -e libgnustl_shared.so 00063cd4 
std::string::operator=(char const*) 
??:0 

확인을하므로 문자열의 정적 할당에 잘못되어 가고 뭔가가있을 수 있습니다. 그러면 오류 서명이 설명됩니다. 그래서, 어떻게 소스 코드에서 이것이 발생 하는지를 어떻게 알 수 있습니까? 다음 단계로 가서 문제점을 일으킨 과제가 있던 곳으로 이동하려면 어떻게해야합니까? 다시 말하지만, 이것은 많은 양의 소스 코드이며 문자열의 많은 정적 할당이있는 것처럼 보입니다. 나는 그것을 좁힐 필요가있다. 추적의 상단 부분 (이 일반적으로 내가보고있는 유일한 부분입니다) 도움이되지 않았다, 그래서

답변

1

좋아, :

03-23  23:37:14.313: I/DEBUG(28):   #00 pc 0000e7c8 /system/lib/libc.so 
03-23  23:37:14.313: I/DEBUG(28):   #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so 

하지만, 더 아래 내가 볼 라인이 라인 :

03-23 23:37:14.344: I/DEBUG(28):  bea814d4 8131f228 /data/data/com.example.hellojni/lib/libsharedB.so 

여기에 addr2line을 사용하고 최근에 libsharedB.so의 기능을 보여주는 다른 줄이 스택에 있으면 나는 대답을 얻습니다. 유일한 추가 트릭은 8131f228이었는데 내가 입력해야 할 주소가 아니 었습니다. 대신, 나는 0131f228에 들어가야했다. 80000000은 라이브러리의 기본 주소이고 나머지는 해당 공간 내의 주소입니다.

+0

당신이이 바닥에있어 기쁘다. 제대로 혼란스러워했다! libsharedB의 결함의 본질은 무엇입니까? – Wil

관련 문제