更新要点 有些开发者朋友向我们抱怨说:在对远程Linux主机或者WSL(WindowsSubsystemforLinux)进行调试时所需要做的配置还是比较麻烦。 我们听到了。 现在,在VisualStudio2019v16。6Preview2中,我们引入了一个新模板,用来简化GDB调试工作。要点如下: 现有的所有调试配置(关于cppdbg)都可以一如既往地正常使用。 当你添加一台新的Linux主机或者WSL的调试配置时,cppgdb的新模板将会默认被使用。 你可以通过阅读调试器帮助文档了解有关新模板的所有架构(schema)信息,这其中比较重要的两点是:新模板的概述(Overview)和有关远程调试的常见问题(FAQ)。 注意:在VisualStudio2019v16。6Preview2中,你还需要手动地设置配置类型(将调试类型手动调整为cppgdb)。 关于新的cppgdb模板 有些开发者觉得旧的调试配置太过详细,容易让人感到困惑,并且没有对应的文档。由此,我们添加了一个新的cppgdb模板,并将配置项做了相当的简化,如下图所示: 新的设置项〔debuggerConfiguration〕指定默认情况下使用哪种调试工具。在VisualStudio2019v16。6中,我们只能将它配置为gdb,因为目前只有它被支持。 当然,还有一些其他的可选配置可以添加到调试配置中,例如 gdbPath:用来指向gdb的路径 cwd:用来指向程序运行目录 preDebugCommand:这是一个新的配置项,用来允许Linux指令可以在调试器启动之前运行。 关于所有配置项和其配置的默认值,大家可以阅读帮助文档。 接下来:对gdbserver的顶级支持 在VisualStudio2019v16。5及以上版本中,你可以手动配置〔launch。js〕来使用gdbserver来调试CMake工程。在即将到来的新VS版本VS版本中,我们将对gdbserver提供顶级支持,从而使用我们新的cppgdb模板。这样你就可以通过〔debuggerConfiguration〕来选择gdbserver并轻松配置gdbserver的路径或者指向gdb的本机路径。 有关远程调试场景的常见问题 我们经常收到一些关于Linux和WSL调试的问题,下面是一些比较常见的问题。 如何向被调试的程序传入参数? 可以通过〔args〕数组来向被调试程序传递命令行参数,如下所示: 如何设定环境变量?需要将我在CMakeSettings。json设定的变量重新设定到环境变量中吗? 在VisualStudio2019v16。5及以上版本中,在CMakeSettings。json中指定的调试目标将会被自动启动。你可以将CMakeSettings。json定义的变量当做环境变量来使用(例如,构建路径等),其语法为:”{env。VARIABLENAME}”。 你也可以通过将CMakeSettings。json中变量的值设置为null来取消变量的定义。 下面的例子演示了将一个新的环境变量(DISPLAY)传入到被调试程序,同时将CMakeSettings。json中定义的DEBUGLOGGINGLEVEL设置为了null。 注意,旧的LinuxWSL的cppdbg配置依赖”environment”这一语法。 我希望在一台机器上编译,在另一台机器上调试,应该怎么做? 在CMakeSettings。json可以指定编译系统(例如一个WSL安装或者一台远程Linux主机)。远程调试系统可以通过修改launch。vs。json配置文件中的〔remoteMachineName〕。 默认情况下,〔remoteMachineName〕的值被同步为你的编译系统。只有当你需要在另一台系统上调试的时候才需要配置这个参数。最简单的修改这个参数的方法是使用IntelliSense(Ctrl空格)来显示一个远程连接的列表并从中选择一个。如下图所示: 还有另外一些可选的部署参数可以被用来分离编译系统和调试系统,具体请参考文档。 我希望能直接和底层的调试器进行交互,可以这样做吗? VisualStudio可以通过命令窗口(CommandWindow)来执行一些自定义的GDB命令。方法如下:打开路径:视图其他窗口命令窗口执行:Debug。MIDebugE你需要执行的gdb命令 我在使用GDB或者GDBServer时碰到了一些问题,应该如何进行troubleshooting呢? 可以通过〔启用日志〕来查看传送给GDB的所有命令,以及GDB的输出和每项命令的执行时间。 打开路径:视图其他窗口命令窗口 执行:Debug。MIDebugLog(On〔:〕Off)〔OutputWindow〕 选项说明: On〔:〕:启用MIEngine日志。可选地指定一个用于保存日志的文件。必须指定文件名或者必须使用”OutputWindow”选项。 Off:禁用MIEngine日志。如果将日志写入到文件,则这个文件将会被关闭。 OutputWindow:将日志输出到输出窗口(OutputWindow)。 总结 通过使用新的模板,在远程Linux主机或者WSL上进行调试将是一件令人赏心悦目的事情。