Windows 8 с выводом отладки C++ directx9

У меня есть игра, в которой мне нужно выяснить конкретную проблему.

Когда вы разворачиваете, перемещаете или изменяете размер окна, устройство DirectX сбрасывается. Но перед его сбросом должны быть освобождены все графически выделенные объекты, не являющиеся частью управляемого пула. Что касается этой игры, кажется, что 30 невыпущенных объектов при выходе из приложения (из вывода базовой библиотеки отладки DirectX), что заставляет меня предположить, что при перезагрузке устройства возникает та же проблема. Это приводит к сбою игры, когда вы разворачиваете, перемещаете или изменяете размер окна, что явно неприемлемо.

Дополнительные исследования показали, что вы можете включить чрезмерную отладку в DirectX через панель управления DirectX, за исключением случаев, когда у вас Windows 8, такая вещь недоступна. Вы можете установить DirectX SDK и открыть панель управления DirectX, но все функции на вкладке Direct3D будут недоступны. Этот чрезмерный уровень вывода отладки затем распечатывал бы адреса выделений, которые не были освобождены при выходе, что могло бы дать мне подсказку о том, что на самом деле не освобождается во время события сброса устройства.

Игра построена на C++ с использованием библиотек DirectX 9 с Visual Studio 2010. Ps. Windows 8 поставляется с DirectX SDK по умолчанию, но без опций панели управления, вы должны вручную установить DirectX SDK, чтобы получить его.

Мой вопрос: как я могу включить чрезмерную отладку DirectX в моей среде (Windows 8 Pro)? Есть ли способ, которым вы могли бы потенциально включить чрезмерную отладку для каждого приложения в исходном коде, пока он скомпилирован с библиотеками отладки DirectX, или вы должны использовать для этого панель управления DirectX?

Привет, Никко.


person Nicco    schedule 13.02.2013    source источник


Ответы (1)


Вы можете включить некоторую отладку через реестр, как указано здесь

Кроме того, я поигрался с панелью управления и заметил, что она изменяет следующие клавиши на моей машине (Windows7):

HKEY_CURRENT_USER\Software\Microsoft\Direct3D\ControlPanel

Флажок «Использовать отладочную версию Direct3D9» в панели управления задает для ключа реестра «LoadDebugRuntime» значение 1 (в противном случае было бы 0).

Отметив «Break On Memory Leak», установите для ключа «BreakOnMemLeak» значение 1. Отметив «Break On D3D Error», установите для ключа «BreakOnDPF» значение 1.

Обратите внимание, что эти же ключи также были продублированы по адресу:

HKEY_CURRENT_USER\Software\Microsoft\Direct3D\

Поэтому, если у вас не установлена ​​панель управления, они могут работать и там.

person default    schedule 14.02.2013