glMapBufferARB возвращает адрес "вне границ" в GDB?
Когда я использую GDB для отладки программ OpenGL, GDB вводит в заблуждение.
Я получаю адрес от glMapBufferARB, адрес в GDB показывает
$35 = (GLubyte *) 0xb74bb000 <Address 0xb74bb000 out of bounds>
И я не могу напечатать его содержание.
Тем не менее, я могу получить доступ к его содержимому в моей программе.
Отличается ли адрес, возвращаемый от glMapBufferARB, от обычного адреса памяти? Почему GDB не может получить к нему доступ?
2 ответа
Отличается ли адрес, возвращаемый от glMapBufferARB, от обычного адреса памяти?
Вероятно, он особенный - библиотека пользовательского пространства OpenGL и драйвер ядра, вероятно, сговорются организовать специальное отображение, которое понимают только они.
Почему GDB не может получить к нему доступ?
GDB использует ptrace(2)
читать подчиненную (отлаженную) память процесса. Весьма вероятно, что драйвер устройства ядра, который фактически общается с вашей видеокартой, не поддерживает ptrace
и попытка GDB прочитать эту память не удалась. Возможно, это ошибка в драйвере устройства, но если вы используете драйвер с закрытым исходным кодом (Nvidia?), Вы, вероятно, ничего не можете с этим поделать.
Отличается ли адрес, возвращаемый от glMapBufferARB, от обычного адреса памяти?
Да, это может быть буфер DMA или память на GPU, отображаемая в адресное пространство вашего процесса. Следовательно, память живет за пределами вашего процесса распределения.