定义宏以在android中记录文件和行的错误

vgo*_*anz 13 c++ java-native-interface logging android c-preprocessor

我想制作一个错误日志,它会引入问题所使用的文件和行.但我没有找到一个很好的参考.所有代码都使用JNI,C++方面.

此尝试失败:

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , LOG_TAG,"%s %s %s",__VA_ARGS__, __FILE__, __LINE__)
Run Code Online (Sandbox Code Playgroud)

这个只显示msg,没有文件和行

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , LOG_TAG,__VA_ARGS__, __FILE__, __LINE__)
Run Code Online (Sandbox Code Playgroud)

我怎么能清楚地打印所有信息?可以只打印一些参数__VA_ARGS__,像__VA_NARG__?这类事情的额外信息或有用的参考?

mbr*_*non 16

非常有趣和有用的问题!我发现这个解决方案可能不是最简单的,但对我有用:

#define LOGE(x...) do { \
  char buf[512]; \
  sprintf(buf, x); \
  __android_log_print(ANDROID_LOG_ERROR,"TAG", "%s | %s:%i", buf, __FILE__, __LINE__); \
} while (0)
Run Code Online (Sandbox Code Playgroud)

这一行:

LOGE("Test: %i", 42)
Run Code Online (Sandbox Code Playgroud)

记录以下内容:

TAG    Test: 42 | path/to/file.cpp:line
Run Code Online (Sandbox Code Playgroud)

512如果你打算记录更长的东西,请注意缓冲区的任意长度!

希望这可以帮助!

  • 您可以使用`snprintf()`来确保不会意外地超过512字节缓冲区的大小. (2认同)