DC娱乐网

VSCode使用介绍-3

VSCode(Visual Studio Code)是微软开发的跨平台免费源代码编辑器。用户可以通过内置的扩展程序商店安

VSCode(Visual Studio Code)是微软开发的跨平台免费源代码编辑器。用户可以通过内置的扩展程序商店安装扩展,以拓展其功能。本文档旨在为用户提供在VSCode中开发VeighNa的参考方案。

本文内容基于Windows系统编写,但大部分也适用于Linux和Mac系统。

VeighNa支持的Windows系统包括:

Windows 11

Windows Server 2019/2022

其他版本的Windows系统安装时可能遇到各种依赖库问题,不推荐使用。

在Windows系统上使用VeighNa,推荐安装官方推出的【VeighNa Studio】Python发行版,特别适合初次接触Python开发的新手用户。

VSCode安装

首先从VSCode官网下载VS Code for Windows安装包:

Python环境选择

在安装了Python插件之后,打开任意.py文件,可以在VSCode窗口的右下角看到当前使用的Python环境信息,如下图所示:

请注意,默认显示的是自动搜索到的Python环境。如果当前系统中存在多个Python环境的话,可以点击右下角的Python环境信息,在窗口顶部弹出的下拉框中选择其他环境进行切换,如下图所示:

运行程序

从Github代码仓库下载VeighNa Trader启动脚本文件run.py,通过VSCode打开run.py文件,如下图所示:

点击VSCode右上角的运行按钮,选择【Run Python File】,即可运行run.py脚本:

此时在界面底部的TERMINAL终端内容输出标签页中,可以看到程序运行时的打印信息:

与此同时,VeighNa Trader的主窗口也会自动弹出显示:

请注意:

这里启动脚本时,会在当前VSCode使用的Python环境中运行,如须使用其他Python环境请参考前文的步骤进行切换;

如果想直接在终端中运行脚本,可以按住Ctrl + J打开Terminal,在其中输入用命令启动VeighNa Trader;

上图中打印的“没有配置要使用的数据服务,请修改全局配置中的datafeed相关内容”输出不影响VeighNa Trader的运行;如果需要配置数据服务,可以在VeighNa Trader主界面【配置】-【全局配置】中配置即可,如果不需要配置数据服务则忽略此条输出即可。

断点调试

VSCode提供了强大的断点调试功能,这里使用一个VeighNa的策略历史回测脚本来演示。

点击【New File】,在界面上方弹出的窗口中选择【Python File】, 在弹出的标签页中创建backtest.py:

然后在文件中编写一段策略回测代码(具体可参考Github仓库中的回测示例),在想要调试暂停的代码行处打上断点,如下图所示(左侧红色小圆点):

点击VSCode右上角的向下按钮,选择【Python Debugger: Debug Python File】, 即可开始调试脚本:

点击左侧菜单栏的Run and Debug图标或者直接按F5键也可开始调试。

启动调试后,可以看到窗口左侧的RUN AND DEBUG区域开始输出程序运行信息,并且程序会暂停运行在第一个断点处。左侧分别显示的是变量信息、监视信息、调用堆栈信息和断点信息。点击变量可以看到详细信息,如下图所示:

点击类似播放键的【Continue】或者按F5键即可继续运行调试,直到下一个断点处再次暂停,如下图所示:

此时可以看到底部左侧VARIABLES区域中,当前上下文中的变量发生了变化:

后续重复上述步骤,点击【Continue】直到调试结束,可以看到Terminal的相应输出:

在调试过程中:

点击【Step Into】可以进入子函数的内部查看运行时的细节状态;

点击【Step Out】则可跳出当前函数,查看外层调用栈的状态;

点击【Step Over】可越过子函数(子函数会执行);

点击【Restart】会重新启动调试任务;

点击【Stop】则会直接停止当前调试任务的运行。

在VARIABLES区域中选中要监控的变量名称点击鼠标右键,选择【Add to Watch】,即可在WATCH监控区域中观测到变量的变化,如下图所示:

窗口底部的DEBUG CONSOLE则提供了交互式的调试功能支持,可以在调试过程中运行任意命令,如下图所示:

C++回调断点调试

通常情况下,VSCode只能在Python解释器中启动的线程里进行代码断点调试。用户如果想要在C++回调函数(如CTP API接口、PySide图形库等)中打断点,可以通过在代码中设置断点的方式,来实现对非Python线程(即C++线程)的断点调试。

点击【New File】,在界面上方弹出的窗口中选择【Python File】, 创建geteway_test.py。

在创建成功的geteway_test.py中添加一段脚本策略的代码(可参考该文件),然后按住Ctrl同时用鼠标左键点击代码中的CtpGateway,跳转至ctp_gateway.py的源码中,在想要调试的回调函数内打上断点(注意不要打在函数定义的def那一行)。回到gateway_test.py开始调试,会发现并没有进入之前设定的断点,如下图所示:

请注意,使用load_json函数读取connect_ctp.json,请确保读取对应.vntrader文件夹的json文件中配置了CTP账户登录信息。

终止调试后,找到之前在ctp_gateway.py中设定的断点处,在回调函数内的断点之前添加以下代码:

import pydevdpydevd.settrace(suspend=False, trace_only_current_thread=True)

请注意:

pydevd是VSCode自带的调试插件,没有安装在Python解释器所在的Python环境里;

suspend参数设置为True之后,调试会在这一句代码运行完之后暂停,而不是停在断点处;

trace_only_current_thread参数设置为True之后,调试过程中只会监控当前线程;

调试结束之后不要忘记删掉这段代码。

然后再次运行调试gateway_test.py脚本,此时可以看到底部的调试窗口中开始输出相关信息,同时程序暂停在了之前设置的断点处。调用堆栈信息窗口显示的是线程信息(可以看到多了一个Dummy线程显示),变量窗口显示的是变量信息(可以看到回调函数的入参):

请注意,如果在调试过程没有跳转,可以点击【Run and Debug】页面上方的设置按钮,打开launch.json,将justMyCode参数配置为false,即可在调试过程中进行跳转,如下图所示: