快好知 kuaihz

大道至简: 调试远程系统和WSL的新模板来了

更新要点

有些开发者朋友向我们抱怨说:在对远程Linux主机或者WSL(Windows Subsystem for Linux)进行调试时所需要做的配置还是比较麻烦。

我们听到了。

现在,在Visual Studio 2019 v16.6 Preview 2中,我们引入了一个新模板,用来简化GDB调试工作。要点如下:

> 现有的所有调试配置(关于cppdbg)都可以一如既往地正常使用。

> 当你添加一台新的Linux主机或者WSL的调试配置时,cppgdb的新模板将会默认被使用。

> 你可以通过阅读调试器帮助文档了解有关新模板的所有架构(schema)信息,这其中比较重要的两点是:新模板的概述(Overview)和有关远程调试的常见问题(FAQ)。

> 注意:在Visual Studio 2019 v16.6 Preview 2中,你还需要手动地设置配置类型(将调试类型手动调整为cppgdb)。

关于新的cppgdb模板

有些开发者觉得旧的调试配置太过详细,容易让人感到困惑,并且没有对应的文档。由此,我们添加了一个新的cppgdb模板,并将配置项做了相当的简化,如下图所示:

新的设置项[debuggerConfiguration]指定默认情况下使用哪种调试工具。在Visual Studio 2019 v16.6中,我们只能将它配置为gdb,因为目前只有它被支持。

当然,还有一些其他的可选配置可以添加到调试配置中,例如

gdbPath: 用来指向gdb的路径

cwd: 用来指向程序运行目录

preDebugCommand: 这是一个新的配置项,用来允许Linux指令可以在调试器启动之前运行。

关于所有配置项和其配置的默认值,大家可以阅读帮助文档。

接下来:对gdbserver的顶级支持

在Visual Studio 2019 v16.5及以上版本中,你可以手动配置[launch.js]来使用gdbserver来调试CMake工程。在即将到来的新VS版本VS版本中,我们将对gdbserver提供顶级支持,从而使用我们新的cppgdb模板。这样你就可以通过[debuggerConfiguration]来选择gdbserver并轻松配置gdbserver的路径或者指向gdb的本机路径。

有关远程调试场景的常见问题

我们经常收到一些关于Linux和WSL调试的问题,下面是一些比较常见的问题。

如何向被调试的程序传入参数?

可以通过[args]数组来向被调试程序传递命令行参数,如下所示:

如何设定环境变量?需要将我在CMakeSettings.json设定的变量重新设定到环境变量中吗?

在Visual Studio 2019 v16.5及以上版本中,在CMakeSettings.json中指定的调试目标将会被自动启动。你可以将CMakeSettings.json定义的变量当做环境变量来使用(例如,构建路径等),其语法为:”${env.VARIABLE_NAME}”。

你也可以通过将CMakeSettings.json中变量的值设置为null来取消变量的定义。

下面的例子演示了将一个新的环境变量(DISPLAY)传入到被调试程序,同时将CMakeSettings.json中定义的DEBUG_LOGGING_LEVEL设置为了null。

注意,旧的Linux/WSL的cppdbg配置依赖”environment”这一语法。

我希望在一台机器上编译,在另一台机器上调试,应该怎么做?

在CMakeSettings.json可以指定编译系统(例如一个WSL安装或者一台远程Linux主机)。远程调试系统可以通过修改launch.vs.json配置文件中的[remoteMachineName]。

默认情况下,[remoteMachineName]的值被同步为你的编译系统。只有当你需要在另一台系统上调试的时候才需要配置这个参数。最简单的修改这个参数的方法是使用IntelliSense(Ctrl + 空格)来显示一个远程连接的列表并从中选择一个。如下图所示:

还有另外一些可选的部署参数可以被用来分离编译系统和调试系统,具体请参考文档。

我希望能直接和底层的调试器进行交互,可以这样做吗?

Visual Studio可以通过命令窗口(Command Window)来执行一些自定义的GDB命令。方法如下:> 打开路径:视图 – 其他窗口 – 命令窗口> 执行:Debug.MIDebugExec <你需要执行的gdb命令>

我在使用GDB或者GDBServer时碰到了一些问题,应该如何进行troubleshooting呢?

可以通过[启用日志]来查看传送给GDB的所有命令,以及GDB的输出和每项命令的执行时间。

> 打开路径:视图 – 其他窗口 – 命令窗口

> 执行:Debug.MIDebugLog (/On[:] | /Off) [/OutputWindow]

选项说明:

> /On[:]: 启用MIEngine日志。可选地指定一个用于保存日志的文件。必须指定文件名或者必须使用”/OutputWindow”选项。

> /Off: 禁用MIEngine日志。如果将日志写入到文件,则这个文件将会被关闭。

> /OutputWindow: 将日志输出到输出窗口(Output Window)。

总结

通过使用新的模板,在远程Linux主机或者WSL上进行调试将是一件令人赏心悦目的事情。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:调试  调试词条  远程  远程词条  大道  大道词条  模板  模板词条  系统  系统词条