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, отображаемая в адресное пространство вашего процесса. Следовательно, память живет за пределами вашего процесса распределения.

Другие вопросы по тегам