Android UVCCamera问题——Cause: null pointer dereference

记录遇到的问题。

采用的开源库链接: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;
}

欢迎大家关注、评论、点赞
你们的支持是我坚持的动力。
Android UVCCamera问题——Cause: null pointer dereference_第1张图片

你可能感兴趣的:(Android,遇见的问题)