関数のエラー適用による致命的なエラー(一)--strcpy
1つのcoderにとって、自分が出会った間違いや解決方法を記録することが重要です.このシリーズの博文を書いて、後用に備えて、皆さんにも役に立つことを望んでいます.
次は、プログラムをデバッグしているときに発生したエラーです.
エラーlog:
この問題に直面して、私は極端に葛藤して、ちょうどこのように考え始めました“libcの中の関数が問題を出した以上、それでは私はどんな方法がありますか?”
最後にネットで関連問題を見て、他の人の解決構想を見て、関連リンクは以下の通りです.
http://stackoverflow.com/questions/12246312/fatal-signal-11-and-invalid-heap-address-in-dlfree-error-when-using-glshaderbina
http://stackoverflow.com/questions/19463705/aborting-invalid-heap-address-in-dlfree-addr-0x00000156
これらを見て、私は「自分の前の考えが間違っていて、libcの問題ではなく、自分のcodeに問題がある」と確信し、自分のcode(実はオープンソースプロジェクトで、多くのコード)を見に戻りました.
私がデバッグして一歩一歩調べたところ、strcpyの使用ミスが原因で、これは非常に低級なエラーで、私はbufに十分な空間を割り当てず、strcpy(buf、src)を直接使用したことが分かった.この問題を修正した後、このエラーはpassになった.
最後に、上記の問題が発生した場合に説明します.
第一に、自分のcodeが間違っているに違いない.
第二に、自分のコードが間違っていることを自分に伝えなければなりません.言い訳をしないでください.
第三に、第一と第二を繰り返す.
第四に、この問題が発生したのはstrcpyが引き起こしたとは限らず、他の関数を使用して引き起こしたのかもしれない.
第五に、strcpyの使用エラーは、前のエラーを引き起こす可能性があります.
第六に、みんながレンガを撮って、分かち合って、交流することを歓迎します.
次は、プログラムをデバッグしているときに発生したエラーです.
エラーlog:
F/libc ( 7081): @@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree
F/libc ( 7081): Fatal signal 11 (SIGSEGV), thread 7130 (UnityMain)
I/DEBUG ( 3309): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 3309): Build fingerprint: 'google/mantaray/manta:4.3/JWR66V/737497:user/release-keys'
I/DEBUG ( 3309): Revision: '8'
I/DEBUG ( 3309): pid: 7081, tid: 7130, name: UnityMain >>> com.jellk.cityrun3d2 <<<
I/DEBUG ( 3309): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
I/DEBUG ( 3309): Abort message: '@@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree'
I/DEBUG ( 3309): r0 00000027 r1 71c5e8e0 r2 00000008 r3 deadbaad
I/DEBUG ( 3309): r4 00000000 r5 75969584 r6 40058000 r7 736ab1b0
I/DEBUG ( 3309): r8 72000e10 r9 73ba887c sl 72000e10 fp 00000000
I/DEBUG ( 3309): ip 00000001 sp 75969580 lr 4008cd7b pc 4008a2e4 cpsr 600f0030
I/DEBUG ( 3309): d0 2064657373617064 d1 736572646461206c
I/DEBUG ( 3309): d2 64646120726f2066 d3 20666f2073736572
I/DEBUG ( 3309): d4 612e312d3264336e d5 2f6b6361625f6b70
I/DEBUG ( 3309): d6 622f737465737361 d7 2f617461442f6e69
I/DEBUG ( 3309): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 3309): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 3309): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 3309): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 3309): d16 000000010628d803 d17 0000000000000001
I/DEBUG ( 3309): d18 0000000000000001 d19 fb30000000000000
I/DEBUG ( 3309): d20 fb30000000000025 d21 0000000000000001
I/DEBUG ( 3309): d22 0000000000000061 d23 0000000000000001
I/DEBUG ( 3309): d24 0000000000000000 d25 0000000000000fff
I/DEBUG ( 3309): d26 00000000000000d0 d27 00000000000000d0
I/DEBUG ( 3309): d28 0000007633533000 d29 00000076335330d0
I/DEBUG ( 3309): d30 0000000000000001 d31 0000000000000001
I/DEBUG ( 3309): scr 80000010
I/DEBUG ( 3309):
I/DEBUG ( 3309): backtrace:
I/DEBUG ( 3309): #00 pc 0001e2e4 /system/lib/libc.so
I/DEBUG ( 3309): #01 pc 0001c4cc /system/lib/libc.so (abort+4)
I/DEBUG ( 3309): #02 pc 000121bd /system/lib/libc.so
I/DEBUG ( 3309): #03 pc 00010e75 /system/lib/libc.so (dlfree+1184)
I/DEBUG ( 3309): #04 pc 0000d9c3 /system/lib/libc.so (free+10)
I/DEBUG ( 3309): #05 pc 0015188c
I/DEBUG ( 3309): #06 pc 00153138
I/DEBUG ( 3309): #07 pc 00027e1c
I/DEBUG ( 3309): #08 pc 0018c634
I/DEBUG ( 3309): #09 pc 0000dd80 /data/app-lib/com.jellk.cityrun3d2-1/libmono.so (mono_jit_init_version+40)
I/DEBUG ( 3309): #10 pc 002c0334
I/DEBUG ( 3309): #11 pc 003b15a8
I/DEBUG ( 3309): #12 pc 003b1a2c
I/DEBUG ( 3309): #13 pc 0001dc0c /system/lib/libdvm.so (dvmPlatformInvoke+112)
I/DEBUG ( 3309): #14 pc 0004de6f /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
I/DEBUG ( 3309): #15 pc 00027020 /system/lib/libdvm.so
I/DEBUG ( 3309): #16 pc 0002b5d0 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
I/DEBUG ( 3309): #17 pc 0005fe91 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292)
I/DEBUG ( 3309): #18 pc 0005febb /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
I/DEBUG ( 3309): #19 pc 00054c4f /system/lib/libdvm.so
I/DEBUG ( 3309): #20 pc 0000ca58 /system/lib/libc.so (__thread_entry+72)
I/DEBUG ( 3309): #21 pc 0000cbd4 /system/lib/libc.so (pthread_create+208)
I/DEBUG ( 3309):
I/DEBUG ( 3309): stack:
I/DEBUG ( 3309): 75969540 77df28b0
I/DEBUG ( 3309): 75969544 00000000
I/DEBUG ( 3309): 75969548 400b4170 /system/lib/libc.so
I/DEBUG ( 3309): 7596954c 71c5e8e0
I/DEBUG ( 3309): 75969550 00000015
I/DEBUG ( 3309): 75969554 4008bd61 /system/lib/libc.so (__sflush+52)
I/DEBUG ( 3309): 75969558 400b4264 /system/lib/libc.so
I/DEBUG ( 3309): 7596955c 400b41c4 /system/lib/libc.so
I/DEBUG ( 3309): 75969560 00000000
I/DEBUG ( 3309): 75969564 4008cd7b /system/lib/libc.so (_fwalk+34)
I/DEBUG ( 3309): 75969568 4008c029 /system/lib/libc.so (_cleanup)
I/DEBUG ( 3309): 7596956c 75969584 [stack:7130]
I/DEBUG ( 3309): 75969570 40058000
I/DEBUG ( 3309): 75969574 736ab1b0
I/DEBUG ( 3309): 75969578 df002777
I/DEBUG ( 3309): 7596957c e3a070ad
I/DEBUG ( 3309): #00 75969580 400b7204
I/DEBUG ( 3309): 75969584 fffffbdf
I/DEBUG ( 3309): 75969588 720aa000
I/DEBUG ( 3309): 7596958c 0000005a
I/DEBUG ( 3309): 75969590 ffffffff
I/DEBUG ( 3309): 75969594 00000000
I/DEBUG ( 3309): 75969598 00000003
I/DEBUG ( 3309): 7596959c 759695c4 [stack:7130]
I/DEBUG ( 3309): 759695a0 400b6ff4
I/DEBUG ( 3309): 759695a4 400884d0 /system/lib/libc.so (__pthread_clone)
I/DEBUG ( 3309): #01 759695a8 00000000
I/DEBUG ( 3309): 759695ac 4007e1c1 /system/lib/libc.so
I/DEBUG ( 3309): #02 759695b0 759699d4 [stack:7130]
I/DEBUG ( 3309): 759695b4 00000055
I/DEBUG ( 3309): 759695b8 759695c4 [stack:7130]
I/DEBUG ( 3309): 759695bc 75969619 [stack:7130]
I/DEBUG ( 3309): 759695c0 759699c3 [stack:7130]
I/DEBUG ( 3309): 759695c4 20404040
I/DEBUG ( 3309): 759695c8 524f4241 /dev/ashmem/dalvik-heap (deleted)
I/DEBUG ( 3309): 759695cc 474e4954 /dev/ashmem/dalvik-heap (deleted)
I/DEBUG ( 3309): 759695d0 6e69203a /system/framework/core.odex
I/DEBUG ( 3309): 759695d4 696c6176 /dev/ashmem/dalvik-mark-stack (deleted)
I/DEBUG ( 3309): 759695d8 64612064 /dev/ashmem/dalvik-mark-stack (deleted)
I/DEBUG ( 3309): 759695dc 73657264 [stack:7097]
I/DEBUG ( 3309): 759695e0 726f2073 /system/lib/libwebcore.so
I/DEBUG ( 3309): 759695e4 64646120 /dev/ashmem/dalvik-mark-stack (deleted)
I/DEBUG ( 3309): 759695e8 73736572 /dev/mali0
I/DEBUG ( 3309): 759695ec 20666f20
I/DEBUG ( 3309): ........ ........
I/DEBUG ( 3309):
I/DEBUG ( 3309): memory near r1:
I/DEBUG ( 3309): 71c5e8c0 00000004 71c61bf0 40b51888 71c61e70
I/DEBUG ( 3309): 71c5e8d0 00000003 00000007 00000004 0000100b
I/DEBUG ( 3309): 71c5e8e0 6d206e49 69616d67 4e4a206e 6e4f5f49
I/DEBUG ( 3309): 71c5e8f0 64616f4c 0000000a 2d202020 78616d20
この問題に直面して、私は極端に葛藤して、ちょうどこのように考え始めました“libcの中の関数が問題を出した以上、それでは私はどんな方法がありますか?”
最後にネットで関連問題を見て、他の人の解決構想を見て、関連リンクは以下の通りです.
http://stackoverflow.com/questions/12246312/fatal-signal-11-and-invalid-heap-address-in-dlfree-error-when-using-glshaderbina
http://stackoverflow.com/questions/19463705/aborting-invalid-heap-address-in-dlfree-addr-0x00000156
これらを見て、私は「自分の前の考えが間違っていて、libcの問題ではなく、自分のcodeに問題がある」と確信し、自分のcode(実はオープンソースプロジェクトで、多くのコード)を見に戻りました.
私がデバッグして一歩一歩調べたところ、strcpyの使用ミスが原因で、これは非常に低級なエラーで、私はbufに十分な空間を割り当てず、strcpy(buf、src)を直接使用したことが分かった.この問題を修正した後、このエラーはpassになった.
最後に、上記の問題が発生した場合に説明します.
第一に、自分のcodeが間違っているに違いない.
第二に、自分のコードが間違っていることを自分に伝えなければなりません.言い訳をしないでください.
第三に、第一と第二を繰り返す.
第四に、この問題が発生したのはstrcpyが引き起こしたとは限らず、他の関数を使用して引き起こしたのかもしれない.
第五に、strcpyの使用エラーは、前のエラーを引き起こす可能性があります.
第六に、みんながレンガを撮って、分かち合って、交流することを歓迎します.