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

Debugging a console ChessEngine.exe "used" in another application (a chess GUI)

本文关键字:国际象棋 GUI 应用程序 ChessEngine 控制台 exe used 调试 另一个      更新时间:2023-10-16

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

实际上,engine.exe是一个符合UCI接口标准的国际象棋引擎,该引擎强制引擎成为命令行可执行文件,并允许在Arena Chess GUI中使用引擎,因此chess标签。(c++是因为我在Visual Studio内部对引擎进行了c++编码,并且因为我想答案将取决于Visual Studioc++项目设置。

我可以通过输入第一步、等待引擎的响应等方式从命令提示符完美地调试Engine.exe。您可以像在Visual Studio中调试标准控制台hello world一样执行,没问题。

现在我对调试Engine.exe更感兴趣,同时从国际象棋 GUI(即竞技场国际象棋 GUI(使用它。但这不起作用:

  • 在用于编译我的引擎的项目的属性中,我把(路径到(竞技场.exe放在启动调试时执行的命令中,然后,当调试被触发并打开竞技场时,我在 Arena 中加载一个与我的引擎对应的新引擎,我在代码中放置了断点,但每个断点都有一个"未加载符号"。

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

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

进行的标准方法是什么?

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

如果您的引擎是该竞技场加载的 DLL,则您列出的步骤将起作用。

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

您必须将调试器附加到引擎,而不是 Arena。

快速问题:您的发动机是在启动时只加载一次还是每次移动时单独加载?