从外部程序调用 C# 应用程序时未命中断点

Breakpoints not hit when C# application called from external program

我能够使用 IronPython 从 Robot Framework 成功调用 C# 方法,但是我在 C# 端面临一些运行时错误,我想使用 Visual Studio 进行调试。当通过外部 program/script 调用其方法时,是否可以使用 Visual Studio 调试 C# 应用程序?

我已经使用“启动外部程序”在 Visual Studio 中配置了我的 C# 项目(提供外部程序所需的机器人可执行路径和参数)。当我开始调试时,我的外部程序按预期执行,C# 方法也成功执行。然而,我在 Visual Studio 中设置的断点没有被击中。

我在使用“启动外部程序”时是否遗漏了任何细节?我的 python 脚本(外部程序)正在从构建 C# 项目时生成它的相同位置导入 DLL。 PDB 文件也可在与 DLL 相同的文件夹中找到。

对我来说断点没有命中,因为我没有附加正确的过程。让我详细解释一下,让其他用户了解根本原因。

正如我在问题中提到的,我使用 IronPython 从 Robot Framework 调用 C# 方法。因此,我使用 robot.exe(Robot Framework 可执行文件)作为我的外部程序(在 Visual Studio 中),我希望我的断点在 C# 项目下被命中。然而,问题是 C# 方法由 ipy.exe (Iron Python) 而不是 robot.exe 执行。看起来 Robot Framework 在内部启动 ipy.exe 进程,然后 ipy 进程调用 C# 方法。这意味着我应该将 ipy.exe 进程附加到我的 C# 项目,以便只要遇到断点,控制就会进入 Visual Studio。

为了达到同样的目的,我做了以下工作。我在 C# 代码的开头插入了 Debug.Assert 以停止执行。现在我已经启动了我的外部程序(机器人框架测试用例),然后在执行过程中,由于 C# 项目中的 Debug.Assert 语句出现消息框。此时我已经使用 Visual Studio 将 ipy.exe(Iron Python) 进程附加到我的 C# 项目中,使用 Debug --> Attach to Process。之后,当我通过忽略消息框继续执行代码时,控制权到达 Visual Studio.

中的断点