是否可以在 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
上放置一个断点。请注意这两种情况下的 *
:它告诉您的调试器取消引用指针并将断点放在正确的位置。
有时我需要找出代码的哪一部分调用了某个 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
上放置一个断点。请注意这两种情况下的 *
:它告诉您的调试器取消引用指针并将断点放在正确的位置。