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


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

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

снимок экрана с интерфейсом Direct3D в окне просмотра

Вы можете включить основные объекты отладки, чтобы зеркальный объект, содержащий все свойства объекта, можно просмотреть в окне наблюдения. Просто добавьте следующий #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 в окне наблюдения.

снимок экрана объекта текстуры Direct3D в окне просмотра

Заметка

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

 

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

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

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

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

  LPCWSTR CreationCallStack;

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

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