在pebble watch上记录枚举
当我在鹅卵石上记录错误时,如下所示:在pebble watch上记录枚举,c,debugging,pebble-watch,pebble-sdk,C,Debugging,Pebble Watch,Pebble Sdk,当我在鹅卵石上记录错误时,如下所示: static void message_dropped(AppMessageResult reason, void *context) { APP_LOG(APP_LOG_LEVEL_DEBUG, "Message dropped. Reason: %d", reason); } 我只得到错误消息的int值。有没有一种简单的方法来记录枚举的文本?比如: static void message_dropped(AppMessageResult reaso
static void message_dropped(AppMessageResult reason, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "Message dropped. Reason: %d", reason);
}
我只得到错误消息的int值。有没有一种简单的方法来记录枚举的文本?比如:
static void message_dropped(AppMessageResult reason, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "Message dropped. Reason: %fancy", reason);
}
// Would return "APP_MSG_BUFFER_OVERFLOW"
没有API函数可以做到这一点。您可以将此函数用于
AppMessageResult
enum:
char *translate_error(AppMessageResult result) {
switch (result) {
case APP_MSG_OK: return "APP_MSG_OK";
case APP_MSG_SEND_TIMEOUT: return "APP_MSG_SEND_TIMEOUT";
case APP_MSG_SEND_REJECTED: return "APP_MSG_SEND_REJECTED";
case APP_MSG_NOT_CONNECTED: return "APP_MSG_NOT_CONNECTED";
case APP_MSG_APP_NOT_RUNNING: return "APP_MSG_APP_NOT_RUNNING";
case APP_MSG_INVALID_ARGS: return "APP_MSG_INVALID_ARGS";
case APP_MSG_BUSY: return "APP_MSG_BUSY";
case APP_MSG_BUFFER_OVERFLOW: return "APP_MSG_BUFFER_OVERFLOW";
case APP_MSG_ALREADY_RELEASED: return "APP_MSG_ALREADY_RELEASED";
case APP_MSG_CALLBACK_ALREADY_REGISTERED: return "APP_MSG_CALLBACK_ALREADY_REGISTERED";
case APP_MSG_CALLBACK_NOT_REGISTERED: return "APP_MSG_CALLBACK_NOT_REGISTERED";
case APP_MSG_OUT_OF_MEMORY: return "APP_MSG_OUT_OF_MEMORY";
case APP_MSG_CLOSED: return "APP_MSG_CLOSED";
case APP_MSG_INTERNAL_ERROR: return "APP_MSG_INTERNAL_ERROR";
default: return "UNKNOWN ERROR";
}
}
我使用了pebble analyze size
命令来测量内存影响。此功能将额外消耗228字节的程序内存。对于大多数开发人员来说,这可能是值得的;)
这就是如何使用上述函数,例如在丢弃的消息处理程序中:
static void appmsg_in_dropped(AppMessageResult reason, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "In dropped: %i - %s", reason, translate_error(reason));
}
这太棒了!但是,我如何调用这个函数呢?我尝试从错误回调调用translate_error(),并尝试将大小写行放入回调中。(我认为那不管用,但我还是试过了)。我不知道将char指针创建为函数名的语法,虽然我可以使用char*translate\u error的指针和值进行操作,但我似乎无法从任何地方调用,因此无法使用值填充它。我还尝试了:char errString=translate_error(AppMessageResult“%d”);应用程序日志(应用程序日志级别调试,错误字符串);试试这个:APP_LOG(APP_LOG_LEVEL_DEBUG,“Got error:%s”,translate_error(result));我在我的帖子中添加了一个例子。完整代码在此处可见: