Отладка консоли ChessEngine.exe «используется» в другом приложении (шахматы GUI) - PullRequest
0 голосов
/ 10 января 2020

У меня есть проект консольного приложения c++ в Visual Studio 2019. Скомпилированный, он дает командную строку engine.exe, которая отправляет выходные данные после пользовательского ввода и выполнения команды и ожидает другого пользовательского ввода и т. Д. c.

Фактически engine.exe - это шахматный движок, который соответствует стандарту интерфейса UCI, который, среди прочего, заставляет движок быть исполняемым файлом командной строки и который позволяет использовать движок в Arena Chess GUI, следовательно, тег chess. (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * из командной строки, введя первый ход, ожидая ответа двигателей и т. д. c. Вы можете сделать то же самое, что и при отладке стандартной консоли hello world в visual studio, без проблем.

Теперь мне гораздо интереснее отлаживать Engine.exe, а , используя , из шахмат * 1049. *, а именно Arena Chess GUI. Но это не работает:

  • В свойствах проекта, используемого для компиляции моего движка, я поместил (путь к) arena.exe в команду для выполнения при запуске отладки, и затем, когда отладка запущена и арена открыта, я загружаю в Arena новый движок, соответствующий моему движку, я ставлю точки останова в своем коде, но у каждого из них «нет загруженных символов».

  • Я запускаю Arena, загружаю в нее новый движок, который является скомпилированной отладочной версией моего движка, а затем в Visual Studio я делаю «присоединение к процессу» и добавляю Arena как процесс для присоединения к нему. Тогда у точек останова в моем коде в Visual Studio также «нет загруженных символов».

Я думаю, что проблема в том, что отладка командной строки невозможна в Visual Studio за пределами windows cmd, тогда как вы можете отлаживать dll из любого exe , используя it.

Какой стандартный способ продолжить?

Замечание. Я уже разместил свой вопрос по CSE здесь https://chess.stackexchange.com/questions/27911/debugging-my-chess-engine-through-the-arena-gui, но, наконец, думаю, что он более подходит для SE, поскольку формально он вообще не зависит от шахмат.

1 Ответ

0 голосов
/ 18 января 2020

Шаги, которые вы перечислили, сработали бы, если бы ваш движок был DLL, загруженной этой Arena.

Однако ваш engine.exe НЕ будет загружен Arena, а просто запустится с каким-то неизвестным интерфейсом. интерфейс процесса связи для передачи информации (перемещения) туда и обратно.

Вы должны подключить отладчик к вашему двигателю, а не к Arena.

Быстрый вопрос: ваш двигатель загружается только один раз при запуске или отдельно за каждый ход?

...