記錄遇到的問題。
採用的開源庫鏈接:https://github.com/saki4510t/UVCCamera
使用該庫預覽的時候,如果拔掉uvc設備,會造成異常閃退。
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Cause: null pointer dereference
r0 00000000 r1 e4a9b9dc r2 0000ffff r3 bf1acf00
r4 bf1acf00 r5 bd10da00 r6 bd10da20 r7 00000004
r8 bda55fe0 r9 00000000 r10 bd10dbcc r11 bbdc3858
ip e4dfdfe4 sp bbdc3698 lr e4dfcd83 pc bee6ec34
backtrace:
#00 pc 00011c34 /data/app/com.raypai.splitassist-dqx6PtGtLxCC3HigSgunAA==/lib/arm/libusb100.so
#01 pc 0000d200 /data/app/com.raypai.splitassist-dqx6PtGtLxCC3HigSgunAA==/lib/arm/libusb100.so
#02 pc 0000cb60 /data/app/com.raypai.splitassist-dqx6PtGtLxCC3HigSgunAA==/lib/arm/libusb100.so (libusb_handle_events_timeout_completed+968)
#03 pc 0000d3cc /data/app/com.raypai.splitassist-dqx6PtGtLxCC3HigSgunAA==/lib/arm/libusb100.so (libusb_handle_events+52)
#04 pc 00012c20 /data/app/com.raypai.splitassist-dqx6PtGtLxCC3HigSgunAA==/lib/arm/libuvc.so (_uvc_handle_events+136)
#05 pc 00065ac7 /system/lib/libc.so (__pthread_start(void*)+22)
#06 pc 0001e9ad /system/lib/libc.so (__start_thread+32)
使用addr2line工具查詢問題
addr2line -i -C -f -e libusb100.so 00011c34
handle_iso_completion
libusb/os/android_usbfs.c:2729
reap_for_handle
libusb/os/android_usbfs.c:2932
op_handle_events
libusb/os/android_usbfs.c:2990
問題在libusb/os/android_usbfs.c文件中的handle_iso_completion 函數,2729行。
if (urb == tpriv->iso_urbs[i]) {
urb_idx = i + 1;
break;
}
這裏tpriv->iso_urbs會有爲NULL的時候。從而導致了空指針。
修改方法如下:
if (tpriv->iso_urbs != NULL && urb == tpriv->iso_urbs[i]) {
urb_idx = i + 1;
break;
}
歡迎大家關注、評論、點贊。
你們的支持是我堅持的動力。