调试在另一个应用程序(国际象棋GUI)中“使用”的控制台ChessEngine.exe

问题描述 投票:0回答:1

我在Visual Studio 2019中有一个c++控制台应用程序项目。已编译,它提供了一个命令行engine.exe,该命令行在用户输入和命令执行后发送输出,并等待其他用户输入等。

实际上engine.exe是符合UCI接口标准的国际象棋引擎,除其他外,它迫使该引擎成为命令行可执行文件,并允许在Arena Chess GUI中使用该引擎,因此使用chess标签。 (c++是因为我在Visual Studio的c++中编码了引擎,并且因为我猜答案取决于Visual Studio c++的项目设置。)

我可以通过输入第一个动作,等待引擎的响应等来从命令提示符中完美调试Engine.exe。您可以像在Visual Studio中调试标准控制台hello一样进行操作,没问题。

现在,我更感兴趣的是从象棋GUI(即Engine.exe使用调试Arena Chess GUI。但这不起作用:

  • 在用于编译我的引擎的项目的属性中,我在命令中放入了arena.exe(路径),以在启动调试时执行,然后在触发调试并打开arena时执行加载Arena是与我的引擎相对应的新引擎,我在代码中放置了断点,但是每个断点都“未加载任何符号”。

  • 我启动了Arena,我在其中加载了一个新引擎,该引擎是我引擎的编译调试版本,然后在Visual Studio中进行“附加到进程”并添加Arena作为要附加的进程。然后我在Visual Studio中的代码中的断点也“没有加载符号”。

我想问题是在Windows cmd提示符之外使用Visual Studio调试命令行是不可能的,而您可以从任何exe using调试dll。

什么是标准进行方式?

备注我已经在https://chess.stackexchange.com/questions/27911/debugging-my-chess-engine-through-the-arena-gui的CSE上发布了我的问题,但最终认为它更适合SE,因为它正式上完全不依赖于国际象棋。

c++ visual-studio debugging console-application chess
1个回答
0
投票
如果您的引擎是该Arena加载的DLL,则列出的步骤将起作用。

但是,您的engine.exe不会被Arena加载,而只是开始使用一些未知的进程间通信接口来回传递信息(动作)。

© www.soinside.com 2019 - 2024. All rights reserved.