Поделиться через


Включение отладочной информации Direct3D (Direct3D 9)

Вы пытаетесь получить дополнительные сведения об объектах Direct3D во время отладки? Например, на следующем снимке экрана показано, что обычно отображается при просмотре интерфейса Direct3D в окне watch.

Снимок экрана интерфейса direct3d в окне watch

Можно включить основные отладочные объекты, чтобы зеркальный объект, содержащий все свойства объекта, можно было просмотреть в окне watch. Просто добавьте следующие #define в код перед файлом D3D9.h:

#define D3D_DEBUG_INFO

Чтобы включить отладочную информацию, #define необходимо создать перед файлом D3D9.h (любая программа, использующий DXUT, автоматически включает D3D_DEBUG_INFO при компиляции программы для отладки). Если вы используете пример пакета SDK, это можно увидеть в dxStdAfx.h (который влияет на все примеры C++). Кроме того, необходимо запустить отладочную среду выполнения Direct3D (которую можно включить из панель управления при необходимости).

Ниже приведен пример использования примера BasicHLSL.

  1. Добавьте #define в файл Dxstdafx.h перед строкой 37.
  2. Создание отладочного проекта.
  3. Установка точки останова в строке 307 в BasicHLSL.cpp
  4. Запустите отладчик.

На следующем снимке экрана показаны подробные сведения об объекте текстуры Direct3D из окна watch.

Снимок экрана: объект текстуры direct3d в окне watch

Примечание

Имена свойств объектов видны, а значения верны, только если включена среда выполнения отладки. При запуске в розничной среде выполнения значения являются недопустимыми.

 

Использование стека вызовов для расширенной отладки

При включенной отладке Direct3D можно также просматривать стек вызовов при каждом создании объекта. Это сделает приложение очень медленным, но его можно использовать для проверка утечки ресурсов. Чтобы записать стек вызовов, задайте для следующего раздела реестра значение 1:

\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Direct3D\\
D3D9Debugging\\EnableCreationStack

При сборке приложения с включенной отладкой вы получите доступ к этой дополнительной переменной:

  LPCWSTR CreationCallStack;

Эта переменная будет хранить стек вызовов при каждом создании объекта. Это сделает приложение очень медленным, но его можно использовать для отладки утечек ресурсов.

Советы по программированию