c++ - 跨平台错误信息

标签 c++ error-handling cross-platform

我想在我的 C++ 跨平台(Windows、Linux、Mac)OpenGL 应用程序无法初始化时显示一条错误消息,让用户知道出了什么问题。

到目前为止我的想法:

  1. 将错误写入 std::cerr
    • 问题:不从 Linux 运行时 Shell 不在 Linux 上显示
    • 问题:控制台始终显示在 Windows 上,即使不需要(如果编译为控制台应用程序)也是如此
  2. 使用 GUI 库
    • 问题:矫枉过正,因为其他一切都将使用 OpenGL 显示。我使用 GLFW 获取窗口/上下文.
  3. 特定于平台的实现和#ifdef
    • 问题:我不想弄乱 native API,以后可能不得不扩展支持

你会如何解决这个问题?

最佳答案

GUI 解决方案实际上是一个很好的解决方案,但问题确实是您需要另一个依赖项,除非...

...您只需为每个平台编写一个函数,它将使用每个平台的 GUI 代码报告错误。

您只需为您的主要平台实现其中一个错误功能报告,然后通过移植,编写其他版本。如果您已经直接在所有平台上工作,那么对所有平台都做一次并继续下去。

因为只是报个消息,所以不应该太难、太长甚至有问题。

只需跟随 K.I.S.S.原则。

(注意:可以在下次启动时显示,而不是出现问题时显示,这样肯定更安全)


也就是说,将来您可能需要更复杂的错误报告系统。在这种情况下,值得投资将错误报告代码开发为一个单独的项目,该项目将具有自己的依赖关系,并且只会被主项目中的任何问题触发(无论其通信方式如何)。在这种情况下,可以使用其他依赖项,如 Qt(虽然它有点重量级......)或 wxWidgets(有点太)或 GTK(我对它的体验并不积极,但对于简单的事情来说没问题)。 FLTK 是一种旨在轻量级和简单的 GUI 框架,因此它可能足够简单和轻量级,可以放在您的应用程序旁边。

关于c++ - 跨平台错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253981/

相关文章:

c++ - 如何处理 pthread_mutex_unlock() 错误?

python - python跨平台高精度时间

java - 如何将 .NET Windows 服务应用程序迁移到 Linux

c++ - 跨平台网络 API

c++ - 大型3D阵列性能: contiguous 1D storage vs T***

c++ - Qt Ctrl++(Control Plus Plus)快捷方式在 Qt 5.5 中不起作用

reactjs - 如何在React Native Redux组件中添加错误处理?

C++ map : manipulate map inside map

c++ - 最多支持多少个依赖类型?

php - 显示正确的错误验证消息