Точка останова приводит к зависанию программы на базе DirectX в полноэкранном режиме

Я начал делать игру, у меня есть глобальный класс, который читает CSV-файл, загружает две поверхности Direct X и создает фон.

поверхности представляют собой лист плитки, а другой - фон, созданный из плиток. фоновая поверхность не работает, после закапывания я проверяю ее, и если она пуста, появляется окно сообщения. Он всегда показывает окно сообщения.

Я попытался установить точки останова, чтобы увидеть, правильно ли считываются значения из CSV-файла, но программа не запускается. на панели задач появляется окно, программа переходит в полноэкранный режим, но экран становится черным и не показывает окно сообщения, и его можно остановить только ctrl, alt, del.

Независимо от того, где я поставил точку останова, даже если она находится в другом исходном файле, это происходит. Кто-нибудь знает, почему?

p.s. это не многопоточное приложение.

Редактировать:

Я использую визуальную студию 2005 и прямой x 9.c


person Skeith    schedule 28.04.2011    source источник
comment
Также, возможно, стоит нажать «шаг» вместо «выполнить», чтобы посмотреть, сможете ли вы войти в код таким образом.   -  person Dave F    schedule 28.04.2011
comment
Полноэкранный режим захватывает дисплей из Windows. Windows больше не может записывать данные на дисплей, не связываясь с DirectX. Поэтому полноэкранный режим в DirectX в наши дни не рекомендуется; гораздо лучше использовать оконный режим и просто развернуть окно на весь экран. Оконный режим лишь немного медленнее, поэтому убедитесь, что вам нужна дополнительная скорость в полноэкранном режиме.   -  person Stephen Chung    schedule 30.04.2011
comment
Разработчики, пишущие программы в полноэкранном режиме, обычно сначала разрабатывают и отлаживают в оконном режиме или используют другой компьютер с удаленным отладчиком.   -  person Stephen Chung    schedule 30.04.2011


Ответы (3)


С directshow отладка в полноэкранном режиме может быть утомительной: если вам действительно нужно это сделать, я предлагаю либо использовать второй экран (таким образом, вы можете отлаживать на своем экране 1, в то время как ваша программа работает в полноэкранном режиме на вашем экране2) .

Если это не сработает, вам придется использовать удаленную отладку (т.е. запустить программу на одном компьютере и отлаживать на другом).

Скорее всего, происходит то, что ваша точка отладки срабатывает, но ваш экран удерживается directshow, и, следовательно, визуальное отображение не может быть отображено. Таким образом, ваша программа фактически заблокирована визуально, она ни на что не отвечает (поскольку цикл событий блокируется отладчиком)

По порядку я бы:

  • запустить в оконном режиме
  • запустите в двойном экране с вашим отладчиком на другом экране
  • попробуйте настроить удаленную отладку (удачи)
  • возможно, используйте старый добрый способ отладки с помощью printf / traces (например, log4cpp)
person Bruce    schedule 28.04.2011
comment
будет использовать printf, но ошибка в том, что я не могу ничего показать на экране, кроме черного, лол, отсюда и опция точки останова. Это действительно полезный ответ, так как я был уверен в инфраструктуре Direct X, которую я разработал и использую, но, думая об этом, я впервые попробовал точку останова в полноэкранном режиме. - person Skeith; 28.04.2011
comment
Я поддерживаю рекомендацию использовать либо две видеокарты и два монитора, либо одну видеокарту, способную управлять двумя мониторами. - person Andy Finkenstadt; 28.04.2011

В Visual Studio, если ваш проект не настроен в режиме отладки (а вместо этого настроен как выпуск), вы не сможете выполнять отладку, поэтому любые установленные вами точки останова будут игнорироваться. Возможно в этом проблема.

person J_D    schedule 28.04.2011
comment
Он находится в режиме отладки, и если точка останова была проигнорирована, почему приложение зависает при запуске? - person Skeith; 28.04.2011
comment
Он может зависнуть, потому что логика вашей программы входит в бесконечный цикл. Это также может иметь место до вашей точки останова, что вызывает описанное поведение. Вы пытались установить точку останова в начале вашей программы и попытаться пройти ее? Я знаю, что это утомительно в графической программе, но вы можете обнаружить такую ​​проблему, из-за которой ваш экран зависает. РЕДАКТИРОВАТЬ: Согласно ответу и информации выше, похоже, что это не так. Похоже, @Bruce на правильном пути. ГЛ! - person J_D; 28.04.2011

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

person Allen Hong    schedule 23.12.2013