目前,在多目标调试中,可以同时启动和调试多个进程。然而,当一个程序出现问题时,另一个程序会继续运行,直到手动停止。Visual Studio具有在其中一个进程出现问题时停止所有进程的能力,将这一功能引入VS Code将会开启许多目前不存在的功能。
oiopk7p51#
@jwberck ,"当一个进程崩溃时停止所有进程"的意思是其他程序在某个随机位置暂停(挂起)了吗?
dwthyt8l2#
@jwberck 提到 "当一个进程中断时停止所有进程",你是说其他程序会在某个随机位置暂停(挂起)吗?我想说的是 "当前位置" 而不是 "随机",但原则上你是对的 @weinand ,让我来说明一下在 GDB 的情况下我是如何实现这个功能的。如果你有一个主进程,你在该进程上设置了断点,你可以自动向次要进程发送一个 "break" 命令,该命令将在次要进程的下一行执行处设置断点。然后这两个进程都会在断点处暂停,并准备好通过典型的 VS Code 界面进行检查。我在这条评论的结尾会详细说明如何通过 VS Code 通用地实现这个功能。这在客户端服务器架构中通常很有用,但就我的具体情况而言,我正在运行航空电子飞行软件和模拟器。由于动态变化非常迅速,模拟器可以在没有自动断点的情况下迅速运行。能够在 FSW 中断点的瞬间检查完整的模拟状态将是一项全新的功能。这还将使我们有可能在断点后继续使用相同的飞行软件和模拟器进程。模拟器运行得非常快,以至于我们通常需要重新启动飞行软件和模拟器才能使它们同步,而这个功能可能会减少这种需求。因此,对于我们这些在飞行软件和模拟器领域工作的人来说,有多个潜在的好处。但显然,这将有助于任何处理两个他们希望在其中一个中断时能够检查的进程的人。这个功能存在于 Visual Studio 中,所以可以实现,而且似乎也可以在 VS Code 中实现。一个允许所有进程同时“继续”的功能也将是有用的,但可以单独处理。现在我来说明一下我是如何看到这个功能实现的,虽然我对 VS Code 的内部不太了解,但我会根据 GDB 服务器的工作原理来尝试。GDB 服务器作为 VS Code C/C++ 调试界面的后端,可以接收设置断点的命令,并报告何时在某一行中断。肯定已经存在一个管理系统来处理这些交互以生成 VS Code 的 GUI 前端。如果添加了一个配置标志 "compound" 启动类型,例如 "breakAllProcessesOnOneBreak",我们只需检查该标志,然后在它为真且一个进程中断时运行一个函数 "breakAllProcesses()"。VS Code 可以定义一些通用的断点命令,然后将其发送给通用进程处理器。处理这些进程(在本例中为 GDB 和 C/C++ 扩展)的特定后端 API 调用的扩展将向这些进程发送 "break" 命令,从而在下一行中断程序并完成该功能。
2条答案
按热度按时间oiopk7p51#
@jwberck ,"当一个进程崩溃时停止所有进程"的意思是其他程序在某个随机位置暂停(挂起)了吗?
dwthyt8l2#
@jwberck 提到 "当一个进程中断时停止所有进程",你是说其他程序会在某个随机位置暂停(挂起)吗?
我想说的是 "当前位置" 而不是 "随机",但原则上你是对的 @weinand ,让我来说明一下在 GDB 的情况下我是如何实现这个功能的。如果你有一个主进程,你在该进程上设置了断点,你可以自动向次要进程发送一个 "break" 命令,该命令将在次要进程的下一行执行处设置断点。然后这两个进程都会在断点处暂停,并准备好通过典型的 VS Code 界面进行检查。我在这条评论的结尾会详细说明如何通过 VS Code 通用地实现这个功能。
这在客户端服务器架构中通常很有用,但就我的具体情况而言,我正在运行航空电子飞行软件和模拟器。由于动态变化非常迅速,模拟器可以在没有自动断点的情况下迅速运行。能够在 FSW 中断点的瞬间检查完整的模拟状态将是一项全新的功能。这还将使我们有可能在断点后继续使用相同的飞行软件和模拟器进程。模拟器运行得非常快,以至于我们通常需要重新启动飞行软件和模拟器才能使它们同步,而这个功能可能会减少这种需求。
因此,对于我们这些在飞行软件和模拟器领域工作的人来说,有多个潜在的好处。但显然,这将有助于任何处理两个他们希望在其中一个中断时能够检查的进程的人。这个功能存在于 Visual Studio 中,所以可以实现,而且似乎也可以在 VS Code 中实现。一个允许所有进程同时“继续”的功能也将是有用的,但可以单独处理。
现在我来说明一下我是如何看到这个功能实现的,虽然我对 VS Code 的内部不太了解,但我会根据 GDB 服务器的工作原理来尝试。GDB 服务器作为 VS Code C/C++ 调试界面的后端,可以接收设置断点的命令,并报告何时在某一行中断。肯定已经存在一个管理系统来处理这些交互以生成 VS Code 的 GUI 前端。如果添加了一个配置标志 "compound" 启动类型,例如 "breakAllProcessesOnOneBreak",我们只需检查该标志,然后在它为真且一个进程中断时运行一个函数 "breakAllProcesses()"。VS Code 可以定义一些通用的断点命令,然后将其发送给通用进程处理器。处理这些进程(在本例中为 GDB 和 C/C++ 扩展)的特定后端 API 调用的扩展将向这些进程发送 "break" 命令,从而在下一行中断程序并完成该功能。