VS Code 调试 OneFlow

本文介绍如何配置 VS Code,搭建 OneFlow 的 GUI 开发环境。

如果对于 VS Code 及其插件系统还不熟悉,可以参阅官方文档

本文包括:

  • 如何编译 Debug 版本的 OneFlow
  • 远程调试所必需的 VS Code 插件的安装配置

编译 Debug 版本的 OneFlow

如果使用 Release 版本的 OneFlow,可能会因为编译器优化,导致在调试过程中程序实际运行位置与源码行不对应。

需要编译 Debug 版本的 OneFlow,并且需要生成 clangd 所需要的 json 文件。

在运行 cmake 的时候需要加上 Debug 及 CMAKE_EXPORT_COMPILE_COMMANDS 的 flag。

cmake .. \

-DCMAKE_BUILD_TYPE=Debug \

-DCMAKE_EXPORT_COMPILE_COMMANDS=1

  • -DCMAKE_BUILD_TYPE=Debug 选项指定编译 Debug 版本
  • -DCMAKE_EXPORT_COMPILE_COMMANDS 选项会在 build 目录下生成后文 clangd 配置时所需要的 compile_commands.json 文件

Remote - SSH

本节内容仅为那些需要远程开发的人员准备,在本地主机上进行开发的人员 可以略过此节

通过 VS Code 的 Remote SSH 插件,可以通过 SSH 的方式连接远程服务器。

被调试对象 OneFlow 可以运行在远程主机上,然后通过 Remote SSH 将远程的情况和本地的 VS Code 用户操作连接起来, 像调试本地程序一样调试远程主机上的程序

安装完成 Remote - SSH 后,按 F1,在弹出的搜索栏中选择 Remote-SSH: Connect to Host...,即可设置 SSH 的连接信息,连接远程主机。

Remote - SSH 连接远程主机后,在插件一栏,会自动分类“远程”与“本地”,如果检测到需要在远程电脑上安装的插件,会显示为灰色,并带有 Install in SSH:远程主机名 的按钮,点击即可将对应插件安装在远程主机。

如上图,已经在远程主机安装 Python、clangd、Native Debug 插件,用于支持远程调试 OneFlow。

但是远程主机并没(本地主机已经安装的)Go 和 HTML CSS Support 插件。

clangd

经过简单的配置,clangd可以为提供代码补全、符号跳转等便利。

在配置 clangd 之前,需要确认:

  • 已经通过编译,生成了compile_commands.json文件
  • 已经通过 Remote - SSH 在远程主机上安装了 clangd 插件
  • 不要 安装 VS Code 默认推荐的 ms-vscode.cpptools C/C++ 插件,因为 clangd 与之有冲突

安装 clangd 程序

VS Code 上的插件,通过与 clangd 服务程序交互,获取解析信息并显示的。因此除了安装 VS Code 上的 clangd 插件外,还需要在 OneFlow 源码所在的主机上 (本文中为远程 Linux 主机)安装 clangd 服务程序。

将采用下载 zip 文件并解压的方式安装 clangd,更多安装方法,可以参考 clangd 官方文档

首先,下载与系统平台对应的clangd压缩包,并解压。 解压后可先运行 clangd 测试下,确保能正常运行后再进行后续配置。

/path/to/clangd/bin/clangd --help

配置 VS Code 中的 clangd 插件

将 build 目录下的 compile_commands.json 文件软链接到 OneFlow 的源码根目录下,在 OneFlow 的源码根目录下:

ln -s ./build/compile_commands.json compile_commands.json

然后 Ctrl+Shift+P (macOS 下 command+shift+p),找到 Open Remote Settings 选项,打开 settings.json 配置文件,在其中加入以下配置:

"clangd.path": "/path/to/bin/clangd",

"clangd.arguments": [

"-j",

"12",

"-clang-tidy"

]

clangd.arguments的意义及更多参数选项,可查阅clangd --help。

使用 clangd

在 VS Code 的 View->Output 面板,下拉菜单中选择 "Clang Language Server",可以看到 clangd 的解析输出,解析完成后。选择 C/C++ 源码中的符号,可以实现跳转。

按Ctrl+P (macOS 下 command+P) 后通过@符号名或#符号名可以分别实现当前文件内查找符号,或工程范围内查找符号。

native debug

Ctrl + Shift + D (macOS 下 command+shift+D) 或者点击 activity bar 的 Run 按钮,进入到 Run 视图。

选择 Create a launch.json file,选择 gdb 模板。

然后设置相关参数:

{

"version": "0.2.0",

"configurations": [

{

"name": "lenet", //自定义任务名

"type": "gdb",

"request": "launch",

"target": "/home/yaochi/.conda/envs/ycof/bin/python3", //python路径

"arguments": "lenet_train.py", //脚本

"cwd": "/home/yaochi/of_example", //脚本所在路径

"valuesFormatting": "parseText"

}

]

}

设置断点后,F5 启动调试:

其它

  • 如果 VS Code 下载插件速度过慢,可以按照官方文档的步骤切换 hostname 或者设置代理。
  • 关于 clangd 安装配置的官方介绍
  • 关于 VS Code 的调试设置的官方介绍
  • clangd 的最新版本可能对 glibc 版本要求过高,导致报缺少库的错误。

./bin/clangd: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./bin/clangd)

此时可以下载其它更低 clangd 的版本(本文推荐版本为 9.0.0),早期版本的 clangd 需要到 LLVM官网 下载整个LLVM工具链,其中包含有 clangd。

VS Code 调试 OneFlow的更多相关文章

  1. VS Code调试.NET Core

    VS Code调试.NET Core应用遇到的坑 为什么会有”坑“ 博客园里有好多介绍怎么使用VS Code以及调试.NET Core的文章,但是都是基于直接构建Asp.Net Core Mvc单项目 ...

  2. VS Code 调试 Angular 和 TypeScript 的配置

    一.安装插件 在 Visual Studio Code 中打开扩展面板(快捷键 Ctrl+Shift+X),搜索安装 Debugger for chrome 插件). 二.配置启动参数 在 Visua ...

  3. Visual Studio Code 调试 PHP

    Visual Studio Code 调试 PHP 2018/12/4 更新 Nginx + php-cgi.exe 下与 Visual Studio Code 配合调试 必需环境 Visual St ...

  4. Visual Studio Code调试node.js:无法在PATH上找到运行时的node

    首先,环境变量Path中加入nodejs的路径: 验证nodejs是否已经加入环境变量: 接着,重新启动Visual Studio Code, 试一下,是不是好了~   附录:Visual Studi ...

  5. 配置 VS Code 调试 JavaScript

    原文:配置 VS Code 调试 JavaScript 1. 安装 Debugger for Chrome 扩展.Open in Browser  扩展.View In Browser 扩展 2.用v ...

  6. Visual Studio Code调试electron主进程

    Visual Studio Code调试electron主进程 作者: jekkay 分类: electron 发布时间: 2017-06-11 14:56  一·概述 此文原出自[水滴石]: htt ...

  7. 配置 VS Code 调试 PHP

    配置 VS Code 调试 PHP 1.下载 xampp 集成服务器wampserver3.1.0-Apache2.4.7_PHP5.6.3-7.0.23-7.1.19_MySQL5.7.19_Mar ...

  8. VS code调试代码快速上手必备知识

    一.通过简单的配置运行一个JavaScript程序 1.打开(创建)一个新的工作空间(文件夹),并创建一个js文件: var name='world'; var s='Hello,${name}!'; ...

  9. windows下用visual studio code 调试go代码

    http://www.golangtc.com/download下载安装包或压缩包 配置环境变量 配置GOROOT: 配置PATH:在PATH最后添加 配置GOPATH:GOPATH的作用请自行百度, ...

随机推荐

  1. hdu2433 spfa+mark[x][u][v]优化

    题意:           删除每一条边求最短路的和,每删除一个就输出一个和.    思路:         直接暴力可定TLE了,自己SB的尝试过,就要剪纸,当每次输出一个答案的时候我们没有必要再从 ...

  2. hdu2371 矩阵乘法(求序列位置改变m次后的序列)

    题意:       给你一个字符串,然后让你执行m次操作,每次操作把当前的字符串映射到他给你的位置序列的位置,比如给的是 3 1 2,第一步就是把原来的3的位置的字母变到1的位置,1的变到2的位置,2 ...

  3. CTF常见的加密和编码方法

    目录 哈希摘要算法 对称加密算法 其他加密算法 编码 哈希摘要算法 以  root 加密为例. MD4:32位的摘要算法.2add09183d0b1dc0428701df9838fba MD5:32位 ...

  4. JSON和JSONP的区别及使用方法

    JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JS ...

  5. Python学习笔记-StatsModels 统计回归(3)模型数据的准备

    1.读取数据文件 回归分析问题所用的数据都是保存在数据文件中的,首先就要从数据文件读取数据. 数据文件的格式很多,最常用的是 .csv,.xls 和 .txt 文件,以及 sql 数据库文件的读取 . ...

  6. 虚拟机之 Parallels Desktop

    去官网看看 在 Mac 虚拟机中跨多个操作系统开发和测试 访问 Microsoft Office for Windows 和 Internet Explorer 快速运行 Windows 应用不会减慢 ...

  7. Faust——python分布式流式处理框架

    摘要 Faust是用python开发的一个分布式流式处理框架.在一个机器学习应用中,机器学习算法可能被用于数据流实时处理的各个环节,而不是仅仅在推理阶段,算法也不仅仅局限于常见的分类回归算法,而是会根 ...

  8. FileInfo & DirectoryInfo

    这节讲两个实例类,FileInfo和DirectoryInfo两个类,用于操作某个具体的文件或者目录. FileInfo:     FileInfo不同于File,它是一个实例类,有一个string类 ...

  9. JSON简单了解

    JSON简单了解 简介 JSON (JavaScript Object Notation):一种简单的数据格式,比xml更轻巧.JSON 是 JavaScript 原生格式,这意味着在 JavaScr ...

  10. Python自动扫描出微信不是好友名单

    前言 最近找几个老友准备聊天发现几个已经被删除好友名单,做为潜水党多年的我已经不知道成为多少人的黑名单,但是好友列表却依然有不是好友的名单,面对庞大的好友数量想要清除谈何容易.虽然可以发消息给所有人, ...