从代码启动调试器时未找到Visual Studio调试器示例

nxagd54h  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在开发一个C#应用程序(我们称之为app A),在某个时候,通过调用Process.Start(...)启动另一个C#应用程序(我们称之为app B)。这两个应用程序都是同一个Visual Studio解决方案的一部分(我使用Visual Studio 2022)。
在调试时,我使用Visual Studio调试器启动app A,并且可以正常工作。但是,我还需要在app A启动app B时对其进行调试。
为了做到这一点,由于app B不是从Visual Studio启动的,因此不会自动附加到调试器,我将以下代码添加到其main()方法的顶部:

public static void Main(string[] args)
{
#if DEBUG
    Debugger.Launch();
#endif

//... rest of the main()
}

这就是我遇到的一个恼人的问题。这就是我在执行这行代码时看到的:

正如你所看到的,它没有检测到当前正在运行的Visual Studio示例,它只给了我一个启动新示例的选项。如果我这样做了,调试器会附加,但是新的示例没有打开解决方案,所以它没有加载正确的源代码,提供了更糟糕的调试体验(更不用说它浪费了时间,因为需要打开一个全新的VS示例)。
我想知道为什么会发生这种情况,因为我在在线教程中看到,你可以附加到一个正在运行的Visual Studio示例,它应该出现在列表中,那么为什么我的没有出现呢?
注意:我读到过,如果你以管理员身份启动VS或你的应用程序,这种情况往往会发生,但事实并非如此,这里的一切都在非提升状态下运行。
我错过了什么?

s3fp2yjn

s3fp2yjn1#

如果我这样做,调试器会附加,但是新示例没有打开解决方案,因此它没有加载正确的源代码。
我按照下面的步骤,发现它可以有app B打开,并加载源代码成功时,我选择了一个新的示例,在即时编译器窗口。
1.在应用程序A中插入应用程序B。

Process.Start(@"path\app B.exe");

2选择一个新的示例来调试应用程序B,它会打开应用程序B解决方案,如下所示。

因为我在在线教程中看到,你可以附加到一个正在运行的Visual Studio示例,它应该出现在列表中。
据我所知,Just-In-Time编译器可以在另一个VS示例中打开app b时检测到正在运行的Visual Studio示例。

本文档说明了您可以使用Visual Studio调试器附加到正在运行的进程。
如果有什么误解,请随时告诉我。

相关问题