故障排除
AUBO SDK提供了 错误码、日志 和 异常处理,它们是分析、判断和解决SDK问题或错误的重要工具。它们可以帮助开发者更好地调试和管理代码,提高代码的可维护性、可靠性和稳定性。日志记录应用程序运行过程中的详细信息,包含程序运行发生错误时的错误码以及说明。异常可用于诊断和处理程序运行过程中出现的非正常情况,比如程序中止或者崩溃。开发者可以根据具体的场景和需求选择合适的方式来调试错误。
错误码
错误码分为3种类型:系统错误码、硬件抽象层错误码和运行时错误码,分别定义在system_error.h、hal_error.h和rtm_error.h三个头文件中。如想查看错误码及其对应的说明,请阅读文档 错误码。
日志
AUBO SDK提供日志来记录程序运行过程中的事件信息、错误信息等详细信息。日志是以文本形式记录,包括时间戳、日志级别、事件描述、错误信息等等,它还提供历史记录,可以帮助开发人员或者技术支持人员在出现问题时快速定位问题,并提供程序运行的详细信息。
日志级别
日志级别表示日志的严重性,范围为从 0 到 5。
LogLevel | 值 | 描述 |
---|---|---|
FATAL | 0 | 严重的错误 |
ERROR | 1 | 错误 |
WARNING | 2 | 警告 |
INFO | 3 | 通知 |
DEBUG | 4 | 调试 |
BACKTRACE | 5 | 跟踪 |
查看日志
用户可以通过以下两种方式查看日志:
日志文件:在 AUBO Sim 虚拟机中或者示教器中,用户可以找到 aubo_control 和 aubo_scope 日志文件,其中 aubo_control 表示服务器,aubo_scope 表示示教器。其文件所在路径为 /root/arcs_ws/log,如下图所示:
终端实时打印日志:在 AUBO Sim 虚拟机中或者示教器中打开终端,切换到日志所在的文件夹路径 /root/arcs_ws/log,输入 tail -f aubo_control.log 或者 tail -f aubo_scope.log。用户在运行程序的时候,可以在终端中实时看到服务器或者示教器的日志打印信息,监测程序运行情况、复现错误问题或查找错误原因。
异常
AUBO SDK 支持异常处理,在其头文件 type_def.h 定义了 AuboException 类。程序在运行过程中可能会出现错误而导致程序终止或者程序崩溃等非正常情况。开发人员可以在程序里添加代码来异常捕获,来避免程序崩溃或者无响应等问题,并定位错误发生的位置或原因等。
AuboException 类
在 C++ 中,AuboException 类中有三个成员函数,分别为 type()、code() 和 what()。
type() 用于返回异常的类型,返回的是 error_type 枚举值,用于标识异常的具体类型,例如解析错误、无效请求、方法未找到等。
error_type 枚举值定义如下:
enum error_type
{
parse_error = -32700, ///< 解析错误
invalid_request = -32600, ///< 无效请求
method_not_found = -32601, ///< 方法未找到
invalid_params = -32602, ///< 无效参数
internal_error = -32603, ///< 内部错误
server_error, ///< 服务器错误
///< 当-32099<= code_<=-32000时,返回该类型
invalid ///< 无效
/// 当code_不在上述范围时,返回该类型
};
code() 用于返回异常的错误码,返回的是 ExceptionCode 枚举值,用于表示异常的具体错误情况。
ExceptionCode 枚举值定义如下:
enum ExceptionCode
{
EC_DISCONNECTED = -1, ///< 断开连接
EC_NOT_LOGINED = -2, ///< 未登录
EC_INVAL_SOCKET = -3, ///< 无效套接字
EC_REQUEST_BUSY = -4, ///< 请求繁忙
EC_SEND_FAILED = -5, ///< 发送失败
EC_RECV_TIMEOUT = -6, ///< 接收超时
EC_RECV_ERROR = -7, ///< 接收错误
EC_PARSE_ERROR = -8, ///< 解析错误
EC_INVALID_REQUEST = -9, ///< 无效请求
EC_METHOD_NOT_FOUND = -10, ///< 方法未找到
EC_INVALID_PARAMS = -11, ///< 无效参数
EC_INTERNAL_ERROR = -12, ///< 内部错误
EC_SERVER_ERROR = -13, ///< 服务器错误
EC_INVALID = -14 ///< 无效
};
what() 用于返回异常对象的详细错误消息。
C++ 捕获异常示例
如果用 C++ 语言来编写程序,则使用 try/catch 来捕获并处理可能出现的异常情况。代码如下:
try{
...// 出现异常的代码
}
catch(const arcs::aubo_sdk::AuboException& e) {
// 打印异常信息
std::cout << "An exception occurs: " << e.what() << std::endl;
// 打印错误码
std::cout << "Exception code: " << e.code() << std::endl;
// 打印异常类型
std::cout << "Exception type: " << e.type() << std::endl;
}
Python 捕获异常示例
如果用Python进行开发,则使用 try/except 来做异常处理。代码如下:
try:
...#出现异常的代码
except pyaubo_sdk.AuboException as ex:
print("An exception occurs: ", ex)