【问题标题】:What does SDL_GetError say in the case of an error?如果出现错误,SDL_GetError 会说什么?
【发布时间】:2018-07-23 17:52:25
【问题描述】:

我的主要问题:请您列举几个SDL_GetError 将打印的示例?

我想使用SDL_GetError 来帮助我调试,但是我不知道会发生什么或如何创建我自己的故意错误。 libsdl wiki 说:

该消息仅在 SDL 函数发出信号时才适用 错误。您必须检查 SDL 函数调用的返回值以确定 何时适当调用 SDL_GetError()。

但是http://sdl.beuc.net/sdl.wiki/SDL_GetError 说:

虽然这个例子使用了 SDL_Init,但 SDL_GetError 提供了一个错误 任何失败的 SDL 操作的消息。

那是什么?只有部分还是全部?我见过的所有 SDL wiki/文档都没有给出示例错误消息的列表,所以我不知道如何引发错误,或者在内容和格式方面会发生什么。是

`./foo' 中的错误:双重释放或损坏(顶部):

SDL_GetError 消息还是由其他原因引起的?

【问题讨论】:

  • 我几乎可以肯定 double free or corruption 不是 SDL 错误。 “我见过的所有 SDL wiki/文档都没有给出示例错误消息的列表”您可以在 SDL 源代码中简单地将 grep 替换为 SDL_SetError 并查看 SDL 使用的所有错误消息。跨度>
  • @HolyBlackCat 我用的是大学电脑,不知道怎么找SDL源
  • 您可以从 SDL 网站下载。
  • 它旨在成为任何人类可读的消息,可以更好地解释请求操作失败的原因。人类可读的消息没有“格式”。您可以像 HolyBlackCat 所说的那样 grep source ,但我真的不明白为什么这可能很重要。 “双重释放或损坏”看起来像 libc 内存分配器故障,最有可能是内存踩踏(或实际上是双重释放同一地址)。

标签: c terminal sdl sdl-2


【解决方案1】:

The wiki entry for SDL_Error 列出错误字符串:

SDL_errorcode |对应的错误字符串


SDL_ENOMEM |内存不足

SDL_EFREAD |从数据流中读取错误

SDL_EFWRITE |写入数据流时出错

SDL_EFSEEK |在数据流中寻找错误

SDL_UNSUPPORTED |未知的 SDL 错误

SDL_LASTERROR |未知的 SDL 错误

任何其他值 |未知的 SDL 错误

另见SDL_error.c。其中一个 wiki 条目似乎不正确。正确的错误代码 - 错误字符串对是:

SDL_UNSUPPORTED |不支持该操作

您可以使用SDL_SetError 设置自定义错误消息 - 请参阅上面的.c。最后,“双重释放或损坏”不是由 SDL 引起的错误,而是很可能由双重释放引起的。我建议使用 gdb/valgrind 对其进行调试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多