我正在尝试寻找一种透明的解决方案来解决调试暂停问题,该问题在我的游戏中屡屡受到打击。

举个简单的例子;说我的渲染器停顿了,告诉我何时尝试使用NULL Material 。我的渲染器处理得很好,但我仍然想知道自己在做错什么。
除非我手动将其禁用,否则此暂停将立即影响每一帧。

这是想要变成宏的代码ID(或其他可能透明的代码)

#define HALT(errorMsg) printf(errorMsg);__asm { int 3 };
satic bool hitOnce = false;
if (!hitOnce)
{
    hitOnce = true;
    HALT("its all gone wrong!")
}

我的想法是创建一个创建此代码的宏,每次都使用一个唯一的bool变量。到目前为止,我遇到的问题是我无法在编译时将number递增,以为每个HALT_ONCE生成唯一的静态 bool(boolean) 值。

最佳答案

这有什么问题吗?

#define HALT_ONCE(err_msg) \
do { \
    static bool hitOnce = false; \
    if (!hitOnce) { \
        hitOnce = true; \
        printf(err_msg); \
        __asm { int 3 }; \
    } \
} while(0)

然后,您可以在代码中执行以下操作:
HALT_ONCE("its all gone wrong!");

do / while创建自己的作用域,这使hitOnce仅存在很短的时间。我认为这将防止它与此宏创建的其他hitOnce变量发生冲突。

07-27 23:25