gpt4 book ai didi

c++ - MSVC __debugbreak()与openGL错误回调一起使用时不产生调用栈

转载 作者:行者123 更新时间:2023-12-02 09:53:37 25 4
gpt4 key购买 nike

我正在使用openGL的最新glDebugMessageCallback约定来帮助我处理openGL错误。我想要做的是有一种方法来查看导致openGL错误的函数。我认为使用回调方法的唯一方法是在我的回调函数中插入一个断点,以便在Visual Studio中生成错误时,我可以返回并检查调用堆栈以查看到底是什么函数导致了该问题:

void GLAPIENTRY MyOpenGLErrorCallbackFunc(GLenum source, GLenum debugErrorType, GLuint errorID, GLenum severity, GLsizei length, const GLchar *message, const void *userParam)
{
switch(debugErrorType)
{
case GL_DEBUG_TYPE_ERROR:
{
BGZ_CONSOLE("GL Type error: %s\nGL error id: %i\n", message, errorID);
#if _MSC_VER
__debugbreak();
#endif
}break;

case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
{
BGZ_CONSOLE("GL deprecated gl function usage error: %s\nGL error id: %i\n", message, errorID);
#if _MSC_VER
__debugbreak();
#endif
}break;

case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
{
BGZ_CONSOLE("GL undefined behavior error: %s\nGL error id: %i\n", message, errorID);

#if _MSC_VER
__debugbreak();
#endif
}break;
};
};

但是,当我尝试通过将无效的枚举传递给其中一个openGL函数进行测试时,尽管程序确实中断了,但我所有的调用堆栈显示为:
myProgram.exe!MyOpenGLErrorCallbackFunc(GLenum source, GLenum debugErrorType, GLuint errorID, GLenum severity, GLsizei length, const GLchar *message, const void *userParam)
[External code]

因此,我的代码没有执行树可以浏览。有没有办法让它工作?

最佳答案

您必须启用同步调试输出:

glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);

如果 Debug Output是异步产生的,则可以从执行命令的线程之外的线程调用调试回调函数。参见 Logging glEnable

关于c++ - MSVC __debugbreak()与openGL错误回调一起使用时不产生调用栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62250963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com