在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));我在我的帖子中添加了一个例子。完整代码在此处可见: