2012-05-24 287 views
1

我有一個非常奇怪的問題 - 我的作品在所有設備上都很好,但偶爾會在三星Galaxy S2上崩潰。SIGBUS只在三星Galaxy S2上崩潰

該應用程序使用ffmpeg和崩潰是在那裏。但是,我在代碼本身中看不到任何問題(如果有的話,它也會在其他設備上崩潰)。

我試圖用所有asm優化進行編譯,但仍然沒有幫助。

它似乎也只是在2.3.6發生崩潰,並沒有在ICS上崩潰。

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I DEBUG : Build fingerprint: '2.3.6/GINGERBREAD/LA2:user/release-keys' 
I DEBUG : pid: 28725, tid: 30055 >>> xxxxxxxxxxxxxx <<< 
I DEBUG : signal 7 (SIGBUS), code 128 (?), fault addr 00000000 
I DEBUG : r0 8e25e9fe r1 000000b1 r2 00877731 r3 00000000 
I DEBUG : r4 5257fe78 r5 005a7300 r6 5257fec4 r7 00630340 
I DEBUG : r8 00000000 r9 00000724 10 81de8c6c fp 006ccfe8 
I DEBUG : ip 81de44b4 sp 5257fe08 lr 819c3748 pc 818386a0 cpsr 28000010 
I DEBUG : d0 fd794ba0fd619c90 d1 fd96d984fd94d4d0 
I DEBUG : d2 fd9232c4fd8c7b34 d3 fdaf8694fda5c318 
I DEBUG : d4 3f33c07d3f333e16 d5 3f34c43d3f34428b 
I DEBUG : d6 40667a147ae147af d7 bff0000000000000 
I DEBUG : d8 3ee4f8b588e368f1 d9 4680000044a04000 
I DEBUG : d10 43a18000446b8000 d11 0000000043a18000 
I DEBUG : d12 0000000000000000 d13 0000000000000000 
I DEBUG : d14 0000000000000000 d15 0000000000000000 
I DEBUG : d16 0000000001e9a790 d17 fe4dfbc0fe7eccdc 
I DEBUG : d18 fdd679ccfe11f78a d19 fd6edbecfd9d4964 
I DEBUG : d20 fe9afe9afea3fea3 d21 fe4dfe4dfe7efe7e 
I DEBUG : d22 fdd6fdd6fe11fe11 d23 fd6efd6efd9dfd9d 
I DEBUG : d24 fd79fd79fd61fd61 d25 fd96fd96fd94fd94 
I DEBUG : d26 fd92fd92fd8cfd8c d27 fdaffdaffda5fda5 
I DEBUG : d28 3f3504f3bf3504f3 d29 bf3504f33f3504f3 
I DEBUG : d30 4433681844aeb242 d31 3f3504f33f3504f3 
I DEBUG : scr 2800009a 
I DEBUG : 
I DEBUG :   #00 pc 000386a0 /data/data/xxxxxxx/lib/libffmpeg.so (av_packet_split_side_data) 
I DEBUG :   #01 lr 819c3748 /data/data/xxxxxxx/lib/libffmpeg.so 
I DEBUG : 
I DEBUG : libc base address: afd00000 
I DEBUG : 
I DEBUG : code around pc: 
I DEBUG : 81838680 0a000012 e5941014 e351000c da00000f 
I DEBUG : 81838690 e2411008 e30e09fe e0822001 e3480e25 
I DEBUG : 818386a0 e5928000 e5929004 e1a01008 e1a02009 
I DEBUG : 818386b0 e6bf2f32 e1838002 e1a06003 e1580000 
I DEBUG : 818386c0 e6bf1f31 e1a07001 e1a09001 0a000002 
I DEBUG : 
I DEBUG : code around lr: 
I DEBUG : 819c3728 e5933020 e3130020 1a000002 e5940014 
I DEBUG : 819c3738 e3500000 0a00001c e1a00004 ebf9d3c4 
I DEBUG : 819c3748 e595c078 e3a03000 e58d3004 e59c3020 
I DEBUG : 819c3758 e3130901 1a000016 e58543a8 e1a00005 
I DEBUG : 819c3768 e1a01007 e1a02006 e1a03004 e1a0e00f 
I DEBUG : 
I DEBUG : stack: 
I DEBUG :  5257fdc8 00000000 
I DEBUG :  5257fdcc 00631ed8 
I DEBUG :  5257fdd0 00001004 
I DEBUG :  5257fdd4 00001000 
I DEBUG :  5257fdd8 00000007 
I DEBUG :  5257fddc 0080a788 
I DEBUG :  5257fde0 000017bd 
I DEBUG :  5257fde4 81f08477 /system/lib/libOpenSLES.so 
I DEBUG :  5257fde8 00632024 
I DEBUG :  5257fdec 00000000 
I DEBUG :  5257fdf0 05007ffc 
I DEBUG :  5257fdf4 00000001 
I DEBUG :  5257fdf8 00000018 
I DEBUG :  5257fdfc afd464ec 
I DEBUG :  5257fe00 0026e7f1 
I DEBUG :  5257fe04 00000000 
I DEBUG : #00 5257fe08 0026f4f6 
I DEBUG :  5257fe0c afd13b69 /system/lib/libc.so 
I DEBUG :  5257fe10 5257fe78 
I DEBUG :  5257fe14 005a7300 
I DEBUG :  5257fe18 5257fec4 
I DEBUG :  5257fe1c 00630340 
I DEBUG :  5257fe20 00000000 
I DEBUG :  5257fe24 00000724 
I DEBUG :  5257fe28 81de8c6c 
I DEBUG :  5257fe2c 819c3748 /data/data/xxxxxxxx/lib/libffmpeg.so 
I DEBUG :  5257fe30 0026f4f6 
I DEBUG :  5257fe34 5257fe78 
I DEBUG :  5257fe38 81de8c70 
I DEBUG :  5257fe3c 5257fe78 
I DEBUG :  5257fe40 81de8c70 
I DEBUG :  5257fe44 81de4420 
I DEBUG :  5257fe48 81de73c4 
I DEBUG :  5257fe4c 00000000 
I DEBUG : dumpstate /data/log/dumpstate_app_native.txt 
I DEBUG : debuggerd committing suicide to free the zombie! 
I DEBUG : debuggerd: Jan 5 2012 22:42:33 

有沒有人看到任何奇怪的設備或特定的Android版本? 或者有什麼建議在哪裏看和如何解決?

+0

SIGBUS通常表示不滿足對齊要求。看到http://stackoverflow.com/questions/212466/what-is-a-bus-error –

回答

0

這實際上是一個NULLPointerException,併發生在您的庫ffmpeg中。當您使用地址(000386a0)查找問題的確切路線時,此行(pc 000386a0 /data/data/xxxxxxx/lib/libffmpeg.so)提供了更多信息。

您可以使用此命令行工具來查找可以解決問題的函數。

cd D:\ndk\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin 


arm-linux-androideabi-addr2line -C -f -e D:\work\ProjectDIR\libs\armeabi\libffmpeg.so 
+0

我試過了,我發現線和功能崩潰。但問題似乎不在代碼中。因爲,如果我在該函數之前進行日誌記錄,或者甚至是最簡單的延遲(如將數據保存到文件) - 它永遠不會崩潰。 – Dmitry

1

我有非常類似的問題 - ffmpeg的幾百幀的解碼後帶來的信號7(SIGBUS)我的應用程序崩潰。這不是很具體的設備 - 在某些設備上,應用程序崩潰的頻率更高,其他更少。

對我來說,這是一個非常難以理解的問題,因爲它可能發生在任何時候的視頻編碼/解碼,我找不到任何導致故障的條件。 但我根據這篇有用的文章,用-malign-double標誌重新編譯了ffmpeg: http://software.intel.com/en-us/blogs/2011/08/18/understanding-x86-vs-arm-memory-alignment-on-android/。它幫助!所以我的完整「配置」行(當然不是所有這些標誌對你都有用):

./configure --target-os = linux --cross-prefix = arm-linux-androideabi- --disable-asm --arch = arm --cpu = cortex-a9 --sysroot = $ {SYSROOT} --enable-neon --disable-avdevice --enable-decoder = mjpeg --enable-demuxer = mjpeg --enable-parser = mjpeg --enable-demuxer = image2 --enable-muxer = mp4 --prefix = build/armeabi-v7a --extra-cflags =' - DANDROID -I $ {NDK_ROOT}/sources/cxx- stl/system/include -mtune = cortex-a9 -mfpu = neon -mfloat-abi = softfp'--extra-ldflags =' - Wl, - fix-cortex-a8 -malign-double -L ../ android- libs -Wl,-rpath-link,../android-libs'--extra-cxxflags =' - Wno-multichar -malign-double -fno-exceptions -fno-rtti'

希望它能幫助你。

相關問題