出错处理

[English]

及时发现与检测程序的错误是一个强健应用程序的基本要求。本节主要讲述 SDK API 错误码定义以及应用程序检测错误码方式。

错误码定义

目前 SDK 中大多数 API 返回 bk_err_t 类型错误码,新增 API 将全部使用 bk_err_t 作为返回值(返回 void 除外)。

SDK 中错误码可分下面几类:

  • BK_OK 表示成功,没有错误, 值为 0

  • 通用错误码,如 BK_ERR_NO_MEM 表示内存不够,定义在 bk_err.h 中

  • 模块错误码,使用 BK_ERR_MOD_xxx 形式定义, 其中 MOD 产生该错误码的模块, 如 BK_ERR_WIFI_STA_NOT_CONFIG 表示由 WiFi 产生的一个具体错误码

SDK 错误码两个特点:

  • 一般使用负数表示出错

  • 错误码在 SDK 全局唯一, 每个模块在 bk_err.h 中定义一个错误码基地址,然后在 API 头文件中定义本模块特有的错误码

备注

第三方代码提供的 API 返回值不是 bk_err_t, 如 socket API 等。

错误码返回

为了使应用程序尽可能精确的定义问题出错点,SDK API 返回错误码时会尽量精确。

一方面将同类别,但出错点不同的错误使用不同的错误码区分,另一方面,尽可能将底层具体错误返回到 API.

备注

在 SDK API 注释中,常常会看到错误码为 others 情形,这表示 API 所调用的底层代码或者其他模块函数所返回。

出错检测宏

应用程序在使用 SDK API 时,建议使用 SDK 提供宏进行出错检测。

BK_LOG_ON_ERR

当 API 返回不为 BK_OK 时打出调用函数名称,行号及错误码,但不会从 API 调用函数返回。

BK_RETURN_ON_ERR

当 API 返回不为 BK_OK 时, 立即从 API 调用函数返回, 返回值为 API 返回的错误码。

BK_ABORT_ON_ERR

当 API 返回不为 BK_OK 时, 调用 bk_reboot() 重起系统。