从代码启动调试器时找不到 Visual Studio 调试器实例

Visual Studio debugger instance not found when launching debugger from code

提问人:Master_T 提问时间:10/4/2023 最后编辑:Master_T 更新时间:10/5/2023 访问量:60

问:

我正在开发一个 C# 应用程序(我们称之为 ),在某个时候,通过调用 启动另一个 C# 应用程序(我们称之为 )。 这两个应用程序都是同一 Visual Studio 解决方案的一部分(我使用的是 Visual Studio 2022)。app Aapp BProcess.Start(...)

调试时,我使用 Visual Studio 调试器启动,这可以正常工作。但是,每当启动它时,我还需要进行调试。app Aapp Bapp A

为此,由于它不是从 Visual Studio 启动的,因此不会自动附加到调试器,因此我将以下代码添加到其方法的顶部:app Bmain()

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

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

这是我遇到烦人的问题的时候。这是我在执行该行代码时看到的:

enter image description here

如您所见,它没有检测到当前正在运行的 Visual Studio 实例,它只为我提供了启动新实例的选项。如果我这样做,调试器会附加,但是新实例没有打开解决方案,因此它没有加载正确的源代码,从而提供更差的调试体验(更不用说它浪费时间的事实,因为需要打开一个全新的 VS 实例)。

我想知道为什么会发生这种情况,因为我在在线教程中看到,您可以将其附加到应出现在列表中的正在运行的 Visual Studio 实例,那么为什么我的实例没有显示出来?

注意:我读到过,如果您以管理员身份启动了 VS 或您的应用程序,往往会发生这种情况,但事实并非如此,这里的一切都在非提升的情况下运行。

我错过了什么?

C# 调试 Visual-Studio-2022

评论

0赞 Palle Due 10/4/2023
启动应用 A exe 文件,然后在 Visual Studio 中选择“调试/附加到进程”,并将应用 B 附加到应用 A 进程。
0赞 Master_T 10/4/2023
@PalleDue:感谢您的想法,但是如果我像您建议的那样“手动”执行此操作,那么在我需要调试应用程序 B 时,只需正常调试应用程序 A,然后手动进行调试 -> 附加到 VS 中的进程会更容易/更快。
0赞 stuartd 10/4/2023
当您通过以下方式运行应用程序时,我认为您必须附加到该进程。Process.Start
0赞 Master_T 10/5/2023
@stuartd:我知道,我要问的是,为什么在代码中执行 Debugger.Launch() 时没有检测到我已经打开的 Visual Studio 实例,而是我必须每本书启动一个新实例。

答:

1赞 Dou Xu-MSFT 10/5/2023 #1

如果我这样做,调试器会附加,但是新实例没有打开解决方案,因此它没有加载正确的源代码。

我按照以下步骤操作,发现当我在实时调试器窗口中选择新实例时,它可以打开并成功加载源代码。app B

1.在应用程序 A 中调用应用程序 B。

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

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

因为我在联机教程中看到,您可以将其附加到正在运行的 Visual Studio 实例,该实例应显示在列表中。

据我了解,当您在另一个 VS 实例中打开时,Just-In-Time Debugger 可以检测正在运行的 Visual Studio 实例。app b

enter image description here

文档说明,可以使用 Visual Studio 调试器附加到正在运行的进程。

如果有任何误解,请随时告诉我。

评论

0赞 Master_T 10/5/2023
好吧,这两个应用程序是同一解决方案的一部分......所以你的意思是,我应该在两个不同的 VS 实例中打开两个解决方案,一个用于调试应用程序 A,另一个用于调试应用程序 B?这并不理想,但比每次我猜都启动一个新实例要好......如果没有人想出更好的解决方案,我稍后会接受你的答案