【问题标题】:Cross-platform error message跨平台错误信息
【发布时间】:2013-06-22 18:25:42
【问题描述】:

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

到目前为止我的想法:

  1. 将错误写入 std::cerr
    • 问题:未在 Linux 上运行时,Shell 不显示在 Linux 上
    • 问题:控制台始终显示在 Windows 上,即使不需要(如果编译为控制台应用程序)
  2. 使用 GUI 库
    • 问题:过大,因为其他所有内容都将使用 OpenGL 显示。我使用GLFW 获取窗口/上下文。
  3. 特定于平台的实现和#ifdef
    • 问题:我不想与原生 API 混为一谈,并且以后可能不得不扩展支持

你会怎么解决这个问题?

【问题讨论】:

    标签: c++ error-handling cross-platform


    【解决方案1】:

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

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

    您将只为您的主要平台实现这些错误功能报告之一,然后通过移植,编写其他版本。如果您已经直接使用所有平台,那么对所有平台执行一次并继续使用它。

    因为只是举报一条消息,应该不难,不长,甚至不成问题。

    只要跟着 K.I.S.S.原则。

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


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

    【讨论】:

      【解决方案2】:

      wxWidgets(或类似的跨平台框架)。或者,手动执行您在 3 下的建议。

      【讨论】:

      • 不,因为一开始它只是一个消息框,以后会是更多的窗口...
      • 在 Linux 上似乎没有那么简单。可能使用 zenity 或 xmessage。
      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多