надеюсь, кто-то может помочь.
В настоящее время я пишу движок для 2D-игр на C++. Когда я запускаю приложение из Visual Studio 2008, используя либо отладку, либо выпуск, все идет нормально.
Когда я затем запускаю исполняемые файлы (либо отлаживаю, либо выпускаю) из проводника Windows, ни одна из них не работает, а просто отображает пустое окно.
Кто-нибудь знает, что вызывает это?
Как минимум, вам нужно будет показать несколько снимков экрана с проблемой. Мы не можем просто гадать о причинах на пустом месте! У вас есть история того, что изменилось? (Полагаю, вы используете какую-то систему контроля версий?) Вы пробовали откатиться к последней удачной конфигурации?
Привет, спасибо за ответ. Да, приложение отлично работает в VS (как в отладочной, так и в выпускной версиях). Это когда я запускаю приложения отдельно от проводника.
@Rags No. Скриншоты. Всегда. Дословные сообщения об ошибках и трассировки стека как текст.
Основываясь на вашей информации, невозможно быть более конкретным, чем «это вызвано ошибкой в вашем коде». Инициализируйте все свои переменные и убедитесь, что вы не делаете никаких предположений о рабочем каталоге.
Сейчас пытаюсь сделать скриншоты, но не знаю, чем это поможет. Скриншоты при запуске из VS показывают нормальную тестовую игру с плитками спрайтов и текстом. Снимок экрана с запуском исполняемого файла из проводника Windows будет просто отображать пустое окно?
@KenAllen Скриншоты не содержат никакой информации, так что не делайте их. Код - вот что важно. Сузьте его и сделайте минимальный воспроизводимый пример.
Спасибо "молбднило". Все классы инициализируют все локальные переменные в своих функциях конструктора и освобождают их (указатели) в функциях деконструктора.
@molbdnilo Это может быть сложно, учитывая масштаб программы. Насколько я могу судить, проблем нет, поскольку они отлично работают в VS как при отладке, так и при выпуске. Просто когда я пытаюсь запустить программы из их исполняемых файлов из проводника Windows, они просто показывают пустое окно (даже если они буквально только что работали из VS.
Будет ли это проблема с разрешениями Windows?
@PasserBy Я предположил, что публикация кода будет нежизнеспособной, так как будет слишком много для публикации - следовательно, что-то, что показало бы некоторый уровень информации о том, что происходило, было необходимо. Конечно, скриншоты не лучший вариант.
Кто-нибудь действительно может ответить на это? Я так много работал над этим приложением, и меня действительно беспокоит то, что я не могу создать работоспособный исполняемый файл.
@KenAllen Может быть, попробуйте запустить DebugView docs.microsoft.com/en-us/sysinternals/downloads/debugview - возможно, он сможет захватить некоторые диагностические данные, которых вы не видите?
@Rags Спасибо, я попробую.
Это может быть проблема Windows, так как у меня общие проблемы с зависанием рабочего стола. Я собираюсь сделать полную переустановку.
Если библиотеки DLL не загружаются, вы обычно получаете диалоговое окно с сообщением об ошибке (выяснить, какая именно DLL была проблемой, может быть непросто, но это не просто дает вам черный экран). Можете ли вы определить, потребляет ли приложение процессорное время, несмотря на черный экран? (т.е. он работает, но рисует некорректно)
ищите "обходчик зависимостей", скорее всего, какая-то DLL, которая вам нужна, не находится в каталоге, где находится ваш .exe, но в основном это может быть много других вещей.
Временное добавление __debugbreak (); в main () - хороший способ отладить приложение, когда оно запускается таким образом. Сверяясь с моим хрустальным шаром, он говорит, что вы забыли скопировать файлы ресурсов в каталог сборки и не кричите достаточно громко, когда не можете их найти / открыть. Работает случайно в среде IDE, поскольку делает каталог по умолчанию таким же, как каталог проекта.
& Rags Ага, я проверил, и он выйдет, когда я нажму Esc (как я это запрограммировал). Думаю, дело не в моих текстурах.
@Hans Passant, что вы говорите, звучит интересно, хотя я воссоздал свои файловые структуры с текстурами в папках Debug и Release, и все равно не повезло :(
Хорошо, после некоторого глубокого изучения этого вопроса, мне удалось решить проблему. Все мои классы инициализируют свои собственные переменные, но я обнаружил, что инкапсулировал некоторый старый код в новый код. То есть у меня было тестирование старого кода для результата, вложенного в тестирование нового кода для того же результата с использованием разных переменных. Переменные старого кода не инициализировались. Угадайте, какая часть этого кода окружала, да, текстуры загрузки. Я собираюсь написать полный ответ на это завтра, чтобы любой, у кого возникла такая же проблема, мог получить полный список вещей для проверки. Спасибо всем за помощь.
Некоторые вещи, на которые следует обратить внимание, отсутствуют зависимости, такие как файлы конфигурации и файлы данных, которые ваша программа не может найти.
Вы также можете попробовать Dependency Walker, чтобы убедиться, что все ваши DLL доступны. http://www.dependencywalker.com
Чтобы решить эту проблему, необходимо проверить несколько вещей.
Пожалуйста, доработайте формулировку вашего вопроса. Как бы то ни было, это не имеет смысла. (Я предполагаю, что вы можете запускать свое приложение из VS, но вы не можете запускать его автономно (например, из проводника). Это может быть связано с разрешением зависимостей DLL, которые могут дать сбой в последнем случае. Однако это недостаточно ответственно без больше информации от вас.)