想要调试程序的用户可以按 F5 从 IDE 运行调试器。 这会开始一系列事件,最终导致 IDE 连接到调试引擎(DE),后者又连接或附加到程序,如下所示:
IDE 首先调用项目包以获取解决方案的活动项目调试设置。 这些设置包括起始目录、环境变量、程序将在其中运行的端口,以及用于创建程序的 DE(如果指定)。 这些设置将传递到调试包。
如果指定了 DE,DE 将调用操作系统来启动程序。 由于启动程序,程序的运行时环境将加载。 例如,如果程序是用 MSIL 编写的,则会调用公共语言运行时来运行程序。
-或-
如果未指定 DE,端口将调用操作系统来启动程序,这会导致加载程序的运行时环境。
注释
如果 DE 用于启动程序,则可能将同一 DE 附加到程序。
根据 DE 还是端口启动程序,DE 或运行时环境随后会创建程序说明或节点,并通知端口程序正在运行。
注释
建议运行时环境创建程序节点,因为程序节点是可以调试的程序的轻型表示形式。 无需加载整个 DE 即可创建和注册程序节点。 如果 DE 设计为在 IDE 过程中运行,但实际上没有 IDE 正在运行,则需要有一个组件可以将程序节点添加到端口。
新创建的程序以及从同一 IDE 启动或附加到的任何其他程序(相关或无关)组成调试会话。
以编程方式,当用户首次按 F5 时,Visual Studio 的调试包会通过 DebugLaunch 该方法调用项目包(它与启动的程序类型相关联),从而使用解决方案的活动项目调试设置填充结构 VsDebugTargetInfo2 。 此结构通过调用 LaunchDebugTargets2 方法传回调试包。 然后,调试包实例化会话调试管理器(SDM),这会启动正在调试的程序以及任何关联的调试引擎。
传递给 SDM 的参数之一是用于启动程序的 DE 的 GUID。
如果 DE GUID 不是
GUID_NULL,SDM 会共同创建 DE,然后调用其 LaunchSuspended 方法来启动程序。 例如,如果程序是使用本机代码编写的,IDebugEngineLaunch2::LaunchSuspended则可能会调用CreateProcess和ResumeThread(Win32 函数)来运行程序。启动程序后,其运行时环境将被加载。 然后,DE 或运行时环境创建 IDebugProgramNode2 接口来描述程序,并将此接口传递给 AddProgramNode ,以通知端口程序正在运行。
如果
GUID_NULL传递,则端口将启动程序。 程序运行后,运行时环境会创建一个IDebugProgramNode2接口来描述程序并将其传递给IDebugPortNotify2::AddProgramNode。 这会通知端口程序正在运行。 然后,SDM 将调试引擎附加到正在运行的程序。
本部分内容
通知端口 说明启动程序后会发生什么情况,并通知端口。
在调试会话准备好将 DE 附加到程序时,在启动后附加。
相关内容
- 调试任务 包含指向各种调试任务的链接,例如启动程序和计算表达式。