调试控制台 ChessEngine.exe "used"在另一个应用程序(国际象棋 GUI)中
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 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。
快速问题:您的发动机是在启动时只加载一次还是每次移动时单独加载?
- C++GTKMM gui循环依赖关系
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- 在 Gui Win32 中创建子窗口C++
- 如何防止 std::thread 在 QT 中冻结 GUI?
- 调试控制台 ChessEngine.exe "used"在另一个应用程序(国际象棋 GUI)中
- 更改 Windows GUI 中静态文本框的字体大小
- 我不知道如何使用代码块win32 gui
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 德尔福在回调中出现 GUI 问题
- 从 GUI 文件资源管理器执行程序,并且不生成终端
- 线程和 GUI 处理
- 在国际象棋骑士巡回赛中遇到困难
- C++ WinAPI[GDI].自定义 gui 正确重绘
- Qt,操作缓慢时不要冻结GUI输入元素
- Xboard 国际象棋 GUI 不发送第二个用户移动
- 通过C GUI程序将国际象棋引擎连接起来