教你使用Visual Studio调试Linux Core Dump

Linux Core Dump不再可怕 从Visual Studio 2019 v16.8 Preview 3开始,我们在WSL(Linux的Windows子系统)或远程Linux…

教你使用Visual Studio调试Linux Core Dump插图

Linux Core Dump不再可怕

从Visual Studio 2019 v16.8 Preview 3开始,我们在WSL(Linux的Windows子系统)或远程Linux系统上添加了对Linux Core Dump的调试支持。 此支持仅适用于非托管代码的“本机”调试。

教你使用Visual Studio调试Linux Core Dump插图(1)

据我们所知的,有一些开发团队主要是在Windows开发他们的系统,但是会同时在Windows和Linux(或者,只在Linux)上部署,然后通过CI(持续集成)系统来收集和Linux相关的错误。这项新添加的特性,可以让你的调试生活更加容易:你可以在你熟悉的环境下调试Linux应用程序的崩溃错误。有了这玩意,妈妈再也不用担心碰到Core dump了。

使用的方法十分简单,在主菜单中选择:[Debug>OtherDebugTargets>DebugLinuxCoreDumpwithNativeOnly…],请注意,这个菜单项只有在你安装了[LinuxdevelopmentwithC++]工作集时才可用。如下图所示:

在接下来的对话框中,会显示调试会话的配置界面,如下图所示:

你也可以在WSL或者远程Linux上调试,但是需要在目标系统上安装有GDB。

下面我们简单的来介绍一下这个对话框的各个属性。

调试WSL(Debug on WSL)

如果这个勾选框被勾选,则Visual Studio会尝试在默认的WSL发行版上寻找Core Dump文件并启动调试会话。这个选项借助于我们对WSL的本机支持,而且无需安装SSH。

调试远程Linux系统(Remote Debug Machine)

如果上面的[Debug on WSL]没有被被勾选,则Visual Studio会在这个选项指定的远程系统上寻找Core Dump文件并启动调试会话。在下拉列表中会列出已经建立的SSH连接。你可以在[Tools > Options > Cross Platform > Connection Manager]中添加一个新的远程连接。

Core Dump文件(Core Dump File)

这个选项指定一个在目标系统存在的Core Dump文件路径。

程序(Program)

这个选项指定产生Core Dump文件的可执行文件。如果你正在WSL上调试并且你的Core Dump和可执行文件都在Windows的文件系统,则你可以通过将本地磁盘挂载到/mnt目录(例如:/mnt/c/Users…)的方式来从WSL中访问这些文件。

源文件(Sources)

这是一个可选项,主要用来指定在Windows上对应的源文件所在的根目录。如果你希望进行源码级调试,则这个选择十分有用。请按照=格式进行设置。另外,可以通过分隔符填入多个条目。

共享库搜索路径(Shared Library Search Path)

一个可选的调试符号搜索路径(会被转换为GDB对应的solib-search-path属性)。

你不需要创建一个Linux配置的CMake工程或一个基于MSBuild的Linux工程就可以使用这个功能。但是要注意的是,如果你打开了一个Linux工程,则Visual Studio将会自动在Program选项中填入对应的信息。如果你有多个编译目标,则Visual Studio会自动填入它能找到的第一个目标。

总结

我一直不太会使用GDB来调试代码,可能是被Visual Studio养成了一个巨婴吧。碰到Core dump,一般就直接啃代码了(GDB不会啊[摊手])。有了今天的这个玩意,感觉这生活还是可以值得期待的。生产环境里出毛病了? 直接上Visual Studio源码级调试:”还是原来的配方,还是同样的味道。”

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。本文来自:《Debug Linux core dumps in Visual Studio》

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115