1

当我使用 GDB 调试 OpenGL 程序时,GDB 存在误导行为。

我从 glMapBufferARB 得到一个地址,GDB 中的地址显示

$35 = (GLubyte *) 0xb74bb000 <Address 0xb74bb000 out of bounds>

而且我无法打印它的内容。

但是,我可以在我的程序中访问它的内容。

glMapBufferARB返回的地址和普通的内存地址有区别吗?为什么GDB不能访问它?

4

2 回答 2

2

glMapBufferARB返回的地址和普通的内存地址有区别吗?

是的,它可能是映射到您的进程地址空间的 GPU 上的 DMA 缓冲区或内存。因此,内存位于您的进程分配之外。

于 2012-07-08T10:27:36.280 回答
1

glMapBufferARB返回的地址和普通的内存地址有区别吗?

它可能很特别——OpenGL 用户空间库和内核驱动程序可能会合谋安排一个只有他们理解的特殊映射。

为什么GDB不能访问它?

GDB 用于ptrace(2)读取劣质(正在调试的)进程内存。实际上与您的显卡通信的内核设备驱动程序很可能不支持ptrace,并且 GDB 读取该内存的尝试失败。这可能是设备驱动程序中的错误,但如果您使用的是闭源驱动程序(Nvidia?),您可能无能为力。

于 2012-07-08T21:26:16.590 回答