调用封装SDK崩溃报错runtime error,如何解决?
【摘要】 这种错误是典型的go指针声明后,没有对指针进行初始化而直接使用导致的错误。错误信息查看代码第516行AddStream函数,下面代码是表示这个函数是错误的关键,并保存成错误文件信息,所以此处不是错误的关键。
除了可以接入RTSP、GB28181外,还通过HIKSDK、Ehome等私有协议完成与设备的对接和视频流的传输。
客户服务器部署EasyCVR项目,在运行一段时间后出现了崩溃问题。打开log日志,错误信息如下图:“runtime error: invalid memory address or nil pointer dereference”。
这种错误是典型的go指针声明后,没有对指针进行初始化而直接使用导致的错误。错误信息查看代码第516行AddStream函数,下面代码是表示这个函数是错误的关键,并保存成错误文件信息,所以此处不是错误的关键。
在次查看错误信息第代码606行:
第606行代码参数代表:通道名称、流地址、通道id、使用sdk的句柄、channelNum和流类型这几个参数。所以与前面报错信息会联想到肯定是调用SDK的句柄的问题。随后查看本地的.DB的数据库进行对比:
字段dahua_device_handle其中有0和-1这二个值。所有有这二个值是登录失败或者错误的时候才有。而程序直接使用了此值。这样会导致调用.dll和.so崩溃的问题。
调用SDK之前,传入句柄的时候进行判断如下:
If loginHandle <=0 {
Return -1, fmt.Errorf(“handle param error:%d”, loginHandle)
}
或者直接在封装的DLL也进行if判断,这样做是为了双重保险。
if (loginHandle <= 0) {
return -1;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)