Visual Studio Code的C/C++扩展功能


[原文发表地址]C/C++ extension for Visual Studio Code

[原文发表时间]2016/03/31

今天对于我们所有微软C++团队的人来说是个令人激动的一天。在Windows的Visual Studio上,我们提供给C和C++开发人员良好的体验,但是同时我们了解到对于一些开发者,因为某些原因,他们选择了Linux或者OS/X作为主要的开发平台,所以不能使用Visual Studio来满足自身的开发需求。今天我们发布了一个预览产品,它可以满足开发者在Linux和OS/X上进行C/C++编辑和调试的需求: Visual Studio Code的C/C++扩展功能

对于不了解Visual Studio Code的人来说,Visual Studio Code是Visual Studio系列产品中的一个新选择,它是一个能够满足开发者对代码进行编辑调试并且使用简单的代码编辑器。当前的Visual Studio Code体验通过C/C++文本捆绑仅仅提供了最基本的语法高亮支持,这个C/C++扩展的预览版本引入了一个更好的语言服务体验,支持代码导航和调试C / C++应用程序的功能,但考虑到这是一个预览版本,有几个事项需要注意!

在这篇文章的剩余部分,我将假定您已经下载并配置Visual Studio Code,以及我们在这里宣布已经发布的C /C++扩展的预览版本。我将带您了解编辑体验,调试体验,以及编译/构建代码的选项。在文章结尾我将分享一些关于如何报告问题,提出要求,以及通常如何对我们目前的计划提出反馈意见的有用链接。

使用Visual Studio Code中的 C / C++代码编辑

当包含C/C++源文件的文件夹被加载到Visual Studio Code,语言服务引擎开始工作,同时标签分析器开始分析源目录,并且生成一个脱机数据库用来存储符号信息(browse.VC.db 文件)。观察红色火焰标志(下图中的Win32 )显示着解析的进度。

一旦符号数据导入模块完成,你可以准备尝试体验此扩展的语言服务部分。目前语言服务体验的预览版通过下列的功能集引入了对代码导航的支持。

导航到当前源文件中的一个特定的符号(cntrl + P,@符号名称)

导航到其他源文件中的一个特定的符号(Cntrl + P, #Symbol Name

 

 

转到定义(F12)

查看定义(Alt + F12)

 

Cntrl + 光标悬停

鉴于这是一个预览版体验,有几个事项需要注意。虽然转到定义和查看定义在大部分情况下可以正常工作,但是对于局部变量不能正常工作。这主要是因为标签分析器目前不能解析函数体。同时由于目前还没有进行语义分析,转到定义和查看定义是基于文本解析和符号匹配的,它们仅仅是部分准确的,我们正在努力做到这一点。

目前的语言服务体验旨在为您提供立即可用的服务,您可以通过提供更多的不在Visual Studio Code所打开的工作目录中的包含路径的信息,来更好的改善使用体验。今后我们将使用相同的机制来获得更多的详细信息,来驱动其他语言服务功能,例如自动完成。

在遍历源代码时,你会发现一些头文件上有的波浪线。而这些头文件上有波浪线的原因是因为我们无法在当前源文件中或者Visual Studio Code所打开的子源文件夹中找到他们。如下图所示,当光标盘桓在这些曲线上,一个灯泡会出现。它将允许您在一个属性文件中指定这些头文件的路径。如下图所示的‘c_cpp_properties.json’文件。

在这个文件中,为你感兴趣的特定配置添加包含目录到“includePath”属性,将有助于推动更全面和准确的语言服务体验。

C/C++ 代码的自动填充

这个在Visual Studio Code C/C++的扩展也介绍了一个对于C/C++ 代码的模糊自动填充的预览版。它是基于一种加强的Tag-parser的方法,换句话说就是没有语义的分析。所以如果不是很精确的话,它将提供给你比现在的单个文件智能感应提供的更多的选项。另外,这种模糊智能感应方法将对真正的C代码工作的特别出色,所以试一下吧,让我们知道你的想法。

Clang-format 代码格式化

你现在可以在Visual Studio Code中使用clang-format格式化你的C/C++代码。目前Clang-format需要手动安装,并且需要把clang-format的路径加入到Visual Studio Code的用户设置中。你可以学到更多关于如何为你的代码格式化设置Clang-format的经验。

Visual Studio Code中调试C/C++应用程序

这个扩展还引入了对使用Visual Studio Code调试C++程序的大力支持。你将能够使用你所熟悉的所有的标准调试功能,包括设置和命中断点,单步执行,查看变量,查看调用堆栈。除此之外,你还能够使用一些高级调试功能,包括函数断点、表达式求值、条件断点和核心dump文件调试。

调试功能目前仅能应用在Ubuntu Linux 14.04(x64)上。我们也正在研究对OS X的支持,目前的体验需要手动安装,并具有一定的局限性。在 windows 上 VSCode的C/C++代码调试目前还不支持。

开始设置

在你开始在Visual Studio Code里调试C++代码之前,你需要设置一些东西。通过点击左侧工具栏上的调试图标,导航到Debug试图上。点击调试面板中的“设置”齿轮图标,然后选择“C++启动(GDB)”,这会打开launch.joson文件。

Launch.json文件定义了一组配置,这组配置告诉调试器如何与你构建的应用程序进行交互。我们设置了两种默认配置,一个用于显示从VS Code中启动应用程序所需要的属性,另一个显示连接到已运行的进程所必需的属性。鼠标悬浮在一个属性的名字上将会显示一个提示框,该提示框描述了属性以及可能的值,但是至少你需要去更新“程序”属性,以使得有程序的名称和路径。通过阅读 VS Code调试代码文档, 你可以了解launch.json 文件中属性的更多信息,以及如何使用它们。

一旦你的launch.json文件配置正确,你就可以调试C++程序了。需要注意的是,除非你创建了一个task.json文件并且把他设置在launch.json文件的preLaunchTask 属性里,否则VS Code不会构建你的程序(只是简单的调试程序)。

函数断点

函数断点使你在函数的开始处而不是一个特定的代码行上中断执行。要在VS Code中设置一个函数断点,需要右键单击“断点”面板,并且单击“添加函数断点”,然后输入需要中断的函数名称。

表达式求值

调试C++代码往往不是简单的看一个断点处的变量值,VS Code的C++扩展功能在几个地方支持表达式求值。你可以在Watch窗口里输入一个表达式,当命中断点时,它就会被求值。需要注意的是这也有副作用,一个表达式如果修改了变量值那么程序执行时的变量值也将被修改。如果你想查看你的代码中的表达式的值,你可以在一个断点停止时,光标悬浮在编辑器中的任何表达式处,数据提示将会显示该表达式的值。如果你只是想查看一次一个表达式(而不是在Watch窗口中查看),你可以在调试控制台中输入表达式。

条件断点

右键单击一个断点,选择“编辑断点”将在编辑器中打开一个窗口。输入一个条件(例如:i>5),当条件判断为真时,断点将被激活和中断执行。条件断点是由一个黑色等于符号来表示的,光标悬浮在一个条件断点处会显示它的值。

核心dump文件调试

该扩展还提供了使用内存dump文件进行调试的功能。要做到这一点,需要在你的launch.json文件的C++启动配置处添加“coreDumpPath”属性,并为你的核心dump设置它的路径。这甚至可以支持在x64机器上调试多线程程序和x86程序。

GDB和MI命令

你也可以使用调试控制台的“-exec”命令去直接执行GDB命令(不过要注意的是在调试控制台直接执行GDB命令还没有经过测试,在某些情况下可能会使得VS Code崩溃)。这里有对VS Code中调试功能的一个全面介绍。

快速演示C / C++体验:

你可以在这里看到更高质量的全面的关于VS Code的讨论channel 9 discussion on VS Code here

让我们知道你的想法!

这次发布的Visual Studio Code 的C/C++扩展版本是一个开始,我们需要你的帮助来使得这个版本更加完整。如果你愿意帮助我们在任何平台上建立最好的C/C++体验,你可以加入我们的跨平台C++内部人士组,在那里你能将能够直接与产品团队交流并且会影响我们在这一领域的投资。我们也意识到你们可能会有一些要求,所以请继续把它们添加到Visual Studio Code 用户之声。我们欢迎你们帮助并且会适当地处理这些反馈。

感谢您阅读到最后,我们期待看到您的错误报告以及您想要我们考虑到的请求。如果您有任何疑问或者算不上bug或者功能请求的意见,请在下面评论—我们的团队会一直在关注此博客的评论,当然了,不要忘记去下载VS Code的C/C++扩展体验

 

 

 


Comments (0)