调用封装SDK崩溃报错runtime error,如何解决?

举报
TSINGSEE青犀视频 发表于 2021/11/12 15:50:46 2021/11/12
【摘要】 这种错误是典型的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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。