记录遇到的问题。
采用的开源库链接: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;
}
欢迎大家关注、评论、点赞、打赏。
你们的支持是我坚持的动力。
版权声明:本文为VNanyesheshou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。