是否可以在 OpenGL 函数处设置断点?

Is it possible to set breakpoint at OpenGL functions?

有时我需要找出代码的哪一部分调用了某个 OpenGL 函数,所以我尝试这样做:

b glEnableVertexAttribArray
----------------------------
Breakpoint 3 at 0x7ffff0326c80 (2 locations)

但是它不起作用,有什么办法让它起作用吗?

我在 ubuntu18.04 中使用 gdb,我的 GPU 是 GeForce GTX 1050 Ti

如果您查看 GL/glew.h header,您会发现它包含类似于以下内容的行:

#define GLEW_GET_FUN(x) x
#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D)
#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements)
#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D)
#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D)

当您调用 glewInit 时,这些 __glew* 变量会填充从您的 OpenGL 实现中提取的指针。 在您的情况下,您应该在此类指针的内容上设置断点,因此 *__glewEnableVertexAttribArray.

对于 GLAD,您必须在 *glad_glEnableVertexAttribArray 上放置一个断点。请注意这两种情况下的 *:它告诉您的调试器取消引用指针并将断点放在正确的位置。