我正在开发一个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或你的应用程序,这种情况往往会发生,但事实并非如此,这里的一切都在非提升状态下运行。
我错过了什么?
1条答案
按热度按时间s3fp2yjn1#
如果我这样做,调试器会附加,但是新示例没有打开解决方案,因此它没有加载正确的源代码。
我按照下面的步骤,发现它可以有
app B
打开,并加载源代码成功时,我选择了一个新的示例,在即时编译器窗口。1.在应用程序A中插入应用程序B。
2选择一个新的示例来调试应用程序B,它会打开应用程序B解决方案,如下所示。
因为我在在线教程中看到,你可以附加到一个正在运行的Visual Studio示例,它应该出现在列表中。
据我所知,Just-In-Time编译器可以在另一个VS示例中打开
app b
时检测到正在运行的Visual Studio示例。本文档说明了您可以使用Visual Studio调试器附加到正在运行的进程。
如果有什么误解,请随时告诉我。