在另一个应用程序(国际象棋 GUI)中调试控制台 ChessEngine.exe "used"
Debugging a console ChessEngine.exe "used" in another application (a chess GUI)
我在 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 world 一样进行操作,不问题。
现在我更感兴趣的是调试 Engine.exe
而 使用 它来自国际象棋 GUI,即 Arena Chess GUI。但这不起作用:
在用于编译我的引擎的项目的属性中,我将(路径)arena.exe 放在启动调试时执行的命令中,然后,当调试时触发并打开竞技场,我在竞技场中加载了一个与我的引擎相对应的新引擎,我在我的代码中放置了断点,但每个断点都有一个 "no symbols loaded".
我启动 Arena,我在其中加载了一个新引擎,该引擎是我引擎的编译调试版本,然后在 visual studio 我制作了一个 "attach to process" 和添加 Arena 作为要附加的进程。那么我代码中的断点在visual studio也有"no symbols loaded".
我想问题是在 windows cmd 提示符之外使用 visual studio 调试命令行是不可能的,而你可以从任何 exe 使用调试 dll 它。
进行的标准方法是什么?
备注。 我已经在此处发布了关于 CSE 的问题 https://chess.stackexchange.com/questions/27911/debugging-my-chess-engine-through-the-arena-gui 但最终认为它更适合 SE,因为它在形式上完全不依赖于国际象棋.
如果您的引擎是由该 Arena 加载的 DLL,则您列出的步骤将有效。
但是,您的 engine.exe
不会被 Arena 加载,而只是开始使用一些未知的进程间通信接口来回传递信息(移动)。
您必须将调试器附加到您的引擎,而不是 Arena。
小问题:您的引擎是在启动时只加载一次还是每次移动都加载一次?
我在 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 world 一样进行操作,不问题。
现在我更感兴趣的是调试 Engine.exe
而 使用 它来自国际象棋 GUI,即 Arena Chess GUI。但这不起作用:
在用于编译我的引擎的项目的属性中,我将(路径)arena.exe 放在启动调试时执行的命令中,然后,当调试时触发并打开竞技场,我在竞技场中加载了一个与我的引擎相对应的新引擎,我在我的代码中放置了断点,但每个断点都有一个 "no symbols loaded".
我启动 Arena,我在其中加载了一个新引擎,该引擎是我引擎的编译调试版本,然后在 visual studio 我制作了一个 "attach to process" 和添加 Arena 作为要附加的进程。那么我代码中的断点在visual studio也有"no symbols loaded".
我想问题是在 windows cmd 提示符之外使用 visual studio 调试命令行是不可能的,而你可以从任何 exe 使用调试 dll 它。
进行的标准方法是什么?
备注。 我已经在此处发布了关于 CSE 的问题 https://chess.stackexchange.com/questions/27911/debugging-my-chess-engine-through-the-arena-gui 但最终认为它更适合 SE,因为它在形式上完全不依赖于国际象棋.
如果您的引擎是由该 Arena 加载的 DLL,则您列出的步骤将有效。
但是,您的 engine.exe
不会被 Arena 加载,而只是开始使用一些未知的进程间通信接口来回传递信息(移动)。
您必须将调试器附加到您的引擎,而不是 Arena。
小问题:您的引擎是在启动时只加载一次还是每次移动都加载一次?