导致无限递归循环的检测代码

Instrumented code causing infinite recursion loop

在以下情况下如何防止疑似无限循环?

当我 运行 程序时,它会在第一次检测调用后冻结。疑似循环是trace_memcpy>std::map::operator[]>trace_memcpy>等等

有没有办法使这个回路短路,例如检测库是否可以检查调用堆栈以查看它已经 调用堆栈中并且 return 早于 trace_memcpy 函数?

谢谢:)

快速且肮脏且可能不是防弹的 - 在 trace_memcpy 的实现中添加一个 static 变量以避免嵌套。

void trace_memcpy(void)
{
    static int nested;
    if (nested)
    {
        return;
    }

    nested = 1;

    // whatever your actual trace logic is

    nested = 0;
}

如果您需要更复杂的东西,请使用系统提供的适当的并发对象。