Table of Content
  1. vscode安装
  2. Python
    1. vscode对于raw_input()的运行与调试
    2. python2与python3切换
  3. C++
    1. g++
    2. MSBuild

最近发现微软的vscode编辑器貌似做得貌似越来越好了,于是也想尝试着体验下。毕竟有时候不是随时都要用集成度比较高的IDE,过于庞大,也累赘。而传说中的。编辑器之神vim,以及神之编辑器Emacs,个人觉得不是太符合自己的操作习惯,于是这么看来vscode确实可以一试。用python和C++较多,就研究了一下windows/Ubuntu对于它们的配置。

vscode安装

windows下的安装不多说了,下载安装就行了。对于ubuntu,官网下载deb文件,如下安装即可:

sudo dpkg -i XXXXX.deb

Python

无论是ubuntu还是windows,python的编译配置都差不多。首先,要安装一个的插件,在extension中搜python,安装一下,非常的快。

由于。vscode只是个编辑器,所以编译器/解释器都是要自己先安装好的。对于python来说,就是先安装好python2.7,并配置好环境变量。对于程序文件的管理,。vscode是以文件夹来配置与管理的,可以理解为一个文件夹就是一个工作空间。我们对于不同的工作空间进行配置,就可以用来run or debug不同的程序。一个简单的python工作文件夹配置完成后,其结构如下:

TEST -
     |-test.py
     |-.vscode
            |-launch.json
            |-tasks.json

新建一个文件夹(TEST)并打开,假设我们在该目录下建立新的文件(ctrl+n),名称为test.py。vscode通过tasks.json和launch.json来配置程序的运行环境。对于python来说,首先配置tasks.json。快捷键ctrl+shift+p,打开vscode的命令,输入Tasks: Configure Task Runner,选择other,tasks.json文件会自动生成,修改其内容如下:

    "version": "0.1.0",
    "command": "python",
    "isShellCommand": true,
    "args": ["${file}"],
    "showOutput": "always"

回想一下我们最纯粹的运行py文件的方式,那就是:

python test.py

所以,command就是python,args就是当前运行文件名。当然,如果存在多个py文件的情况下,为了避免运行乱了,可以直接把args指定为入口py文件。配置好tasks.json之后,快捷键ctrl+shift+b,即可运行。

进行Dubug的配置,首先ctrl+shift+d进入debug界面,点击小齿轮,会生成一个launch.json的文件。我个人觉得默认的文件配置就可以用了。现在就可以F5进入调试,可以打断点,还不错。

vscode对于raw_input()的运行与调试

正常来说,这样的配置就很OK了,但是我发现vscode在调试python的一个小问题就是,。没有办法交互式的接受用户输入,即用raw_input(“>”)的时候,就会一直卡在这里。研究了一下,只能如下将就:

  1. 如果只是运行,则不使用ctrl+shift+b方式,而是在vscode的termi下自己运行。
  2. 如果是debug,则在debug界面选择 Integrated Terminal/Console 或者 External Terminal/Console,启动内部或者外部控制台来做debug。

python2与python3切换

最近安装了miniconda的python3的环境,有时候想在vscode里面用不同版本的python进行调试。简单研究了一下,主要需要的配置如下,假设系统(例如ubuntu默认的python是python3),即终端下:

viki@c3po:~$ python --version
Python 3.6.3 :: Anaconda, Inc.

则按照上述配置后的vscode环境将会默认用该版本的python运行。但是我miniconda的python3环境是需要手动激活的:

source activation miniconda/envs/{yourconda}

因此,虽然默认会调用该版本的python3,但是相应的库却不一定会包含进来,例如numpy之类的。因此解决的办法是在task.json中直接指明command路径:

{
    "version": "0.1.0",
    "command": "{condaPath}/envs/carnd-term1/bin/python3",
    "isShellCommand": true,
    "args": ["main.py"],
    "showOutput": "always"
}

如果需要切换到python2环境,task.json中将command写明为python2:

{
    "version": "0.1.0",
    "command": "python2",
    "isShellCommand": true,
    "args": ["main.py"],
    "showOutput": "always"
}

这样设置以后,利用ctrl+shift+b程序就会按照对应的python版本来运行。

再说一下debug的问题,task.json管理的是运行的问题,debug情况下(即用f5调试),也需要在launch.json中,修改pythonPath为对应要用的版本:

    "name": "Python",
    "type": "python",
    "request": "launch",
    "stopOnEntry": true,
    "python.pythonPath": "{condaPath}/envs/carnd-term1/bin/python3",
    "program": "${file}",

另外在ctrl+shift+p,中搜索preference:Open User Setting,可以打开setting.json文件,可以修改其中的pythonPath,貌似是个一了百了的方法:

"python.pythonPath": "{yourpython3Path}/python3" //Python3
"python.pythonPath": "{yourpython3Path}/python2" //Python2

C++

g++

C++的配置,首先,vscode中安装c/c++的插件是必须的。接下来配置稍微复杂一点点,先说通用形式,即采用g++来编译。首先确保ubuntu和windows中都有g++。如果没有的话,ubuntu下可以通过apt-get的方式来安装,windows则可以安装cygwin或者mingw,一定要确保的是安装是勾选了gdb,否则之后没办法配置debug。可以使用如下命令来确认自己机器上是否有g++:

g++ --version

之后的步骤可以参见python的配置,vscode打开工作文件夹,建立文件。然后配置tasks.json。假设最终配置完后,我们的文件结构如下:

TEST-
    |- myHead.h
    |- myHead.cpp
    |- main.cpp
    |-.vscode-
             |-tasks.json
             |-launch.json
             |-c_cpp_properties.json

myHead.h是一个自己写的类声明,myHead.cpp是类实现,main.cpp则是主函数的入口。正常来说用g++来编译该程序:

//windows:
g++ -g main.cpp myHead.cpp -o main.exe
//ubuntu:
g++ -g main.cpp myHead.cpp -o main.o

因此,相应的tasks.json文件,可以改为:

//windows:
    "version": "0.1.0",
    "command": "g++",
    "isShellCommand": true,
    "args": ["-g","main.cpp","myHead.cpp","-o","main.exe"],
    "showOutput": "always"
//ubuntu:
    "version": "0.1.0",
    "command": "g++",
    "isShellCommand": true,
    "args": ["-g","main.cpp","myHead.cpp","-o","main.o"],
    "showOutput": "always"

之后在debug界面,点击小齿轮选择。C++(GDB/LLDB),launch.json文件会自动生成,需要修改如下:

//windows:
"program": "${workspaceRoot}/main.exe"
//ubuntu:
"program": "${workspaceRoot}/main.o"

//botn win and ubuntu:
"cwd": "${workspaceRoot}"

C++程序有很多include是需要包含的,如果检测不到,会报错,这些include路径可以在c_cpp_properties.json中添加,Ctrl+Shift+p,输入C/Cpp: Edit Configurations,会自动生成c_cpp_properties.json,在其中,根据对应的操作系统添加好include的path就行了。

之后,可以使用ctrl+shift+b,编译出对应程序,按F5启动debug调试,设置断点。

MSBuild

说到C++工程,不得不提VS的工程,如果我们拿到一个是由VS创建的工程文件夹。(含有.sln文件)。怎么使用vscode来编译调试呢。g++肯定是不行了,这个时候就要使用MSBuild来配置。

同样,先打开该工程文件夹。在Ctrl+Shift+p中输入Tasks: Configure Task Runner,此时。直接选择MSbuild不要选other,来生成tasks.json,并修改其中的command为MSBuild.exe所在的路径:

"version": "0.1.0",
    "command": "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/msbuild",
    "args": [
        // Ask msbuild to generate full paths for file names.
        "/property:GenerateFullPaths=true"
    ],
    "taskSelector": "/t:",
    "showOutput": "silent",
    "tasks": [
        {
            "taskName": "build",
            // Show the output window only if unrecognized errors occur.
            "showOutput": "silent",
            // Use the standard MS compiler pattern to detect errors, warnings and infos
            "problemMatcher": "$msCompile"
        }
    ]

之后进入debug页面,点击小齿轮,选择debug的方式为。C++(Windows),自动生成launch.json。修改program为编译以后的exe的位置:

"program": "C:/document/vscode/C++/test/Debug/test.exe"

同样,需要在C/Cpp: Edit Configurations,设置c_cpp_properties.json中的include路径,例如:

"name": "Win32",
"includePath": [
    "${workspaceRoot}",
    "C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include"
],
"defines": [
    "_DEBUG",
    "UNICODE"
],
"browse": {
    "path": [
    //add include path here
        "C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include",
        "C:/Program Files (x86)/Windows Kits/8.0/Include/um"
    ],
    "limitSymbolsToIncludedHeaders": true,
    "databaseFilename": ""

然后就可以运行,并调试vs工程的c++程序了。

Ok, 先这么多吧,以后再研究一下用g++的时候,怎么用make来做编译调试。毕竟文件多了,make会方便一些。