Halcon抛出异常日志

Halcon 抛出异常日志

// 捕获Halcon异常并生成格式化的错误日志信息
// 参数说明:
// - HDevExpDefaultException:Halcon异常对象引用,包含具体的异常信息
// - functName:发生异常的函数名称,用于日志定位
// - htMessage:输出参数,用于存储格式化后的完整错误信息
void CatchHexceptLog(const HalconCpp::HException& HDevExpDefaultException, std::string functName, std::string& htMessage)
{
    // 定义变量,用于存储异常发生的行号和操作符字符串
    std::string strLine, strOperator;
    // 定义Halcon数据结构HTuple,用于存储异常相关信息
    // htException:存储转换后的异常数据
    // hv_ErrorLine:存储异常发生的程序行号
    // hv_Operator:存储发生异常的Halcon操作符
    // hv_OperatorMsg:存储操作符相关的错误消息
    HTuple  htException, hv_ErrorLine, hv_Operator, hv_OperatorMsg;
    
    // 将HException异常对象转换为HTuple类型,便于后续提取异常详情
    HDevExpDefaultException.ToHTuple(&htException);
    
    // 从异常数据中提取"program_line"(程序行号)信息,存储到hv_ErrorLine
    HException::GetExceptionData(htException, "program_line", &hv_ErrorLine);
    // 从异常数据中提取"operator"(操作符)信息,存储到hv_Operator
    HException::GetExceptionData(htException, "operator", &hv_Operator);
    // 从异常数据中提取"error_message"(错误消息)信息,存储到hv_OperatorMsg
    HException::GetExceptionData(htException, "error_message", &hv_OperatorMsg);
    
    // 将行号从HTuple类型转换为std::string类型,便于字符串拼接
    strLine = hv_ErrorLine.ToString().Text();
    // 将操作符从HTuple类型转换为std::string类型
    strOperator = hv_Operator.ToString().Text();
    
    // 构建基础错误信息,包含行号、操作符和消息前缀
    std::string Message = "Line:" + strLine + ", Op:" + strOperator + ", Msg:";
    // 获取异常的错误消息字符串(HException自带的错误描述)
    std::string msgError = HDevExpDefaultException.ErrorMessage();
    
    // 组合所有信息:函数名 + 基础错误信息 + 详细错误描述,存入输出参数
    htMessage = functName + "-->" + Message + msgError;
}

使用方式

try{
// ...省略
}
catch (HException& excp)
{
	std::string errMess;
	CatchHexceptLog(excp, __FUNCTION__, errMess);
	qDebug() << str2QStr(errMess);
	return false;
}
posted @ 2025-09-22 21:26  一楼二栋  阅读(16)  评论(0)    收藏  举报