VSCode launch.json配置详解
vscode原文地址
启动配置必须设定请求类型,属性 request , 分为 launch (启动) 和 attach (附加)两种 ,看下面例子:
打印参数可以发现 args 、runtimeArgs 都会传给程序,但是 runtimeArgs 参数会紧跟可执行文件
传递参数:
如果主脚本也在符号链接路径里面,需要再传递一个参数 "--preserve-symlinks-main" ,支持的版本是 Node 10+.
如果使用esm或传递 --experimental-modules 给Node.js以便使用ECMAScript模块,则可以传递这些选项通过 runtimeArgs 属性:
VSCode Launch.json配置。
launch.json属性可帮助支持不同的调试器和调试方案。如上所述,一旦为属性指定了值,就可以使用IntelliSense(⌃Space)查看可用属性的列表type。
Launch.json必要属性
必须具有以下属性:
例如React-Native全局启动配置:
参考官网 :
VSCode 调试
更全面的信息可以参考官方 调试手册 ,以下记录我用 VSCode 调试的一些经验。
想要在 VSCode 里调试,需要配置两个文件 tasks.json 和 launch.json 。
这两个文件按 F5 后会自动在 .vscode 目录下生成。
一般默认生成的 tasks.json 文件如下:
我们需要关注的选项有:
深入理解 tasks.json 文件的作用与 "command" 选项的用法,我们就能灵活地配置构建工程。
tasks.json 文件是用来构建工程的,当我们按 F5 进行调试时,VSCode 首先会执行 tasks.json 文件里 "command" 选项后的命令,并传入 "args" 参数,这样整个工程就被重新编译链接一遍了。
以 hello.c 文件和上述 tasks.json 为例,按 F5 进行调试时,最终会在命令行执行下述命令构建工程:
当然,如果一个工程有多个文件,"command" 就不能是简单的 gcc 了,需要根据实际的构建系统选择。
如果构建系统使用的是 Makefile ,那我们可以配置
这样在构建项目时就会使用命令
这跟我们平时使用 make 构建项目是一致的。
又比如配置 Zephyr 环境,
这样在构建项目时相当于执行命令
launch.json 文件用于配置调试环境。一般默认生成的文件如下:
我们需要关注的选项有:
VSCode 预定义了一些变量,可以在 Variables Reference 查看意思。
有时候我们的程序需要访问硬件资源,这一般需要 root 权限,而 VSCode 一般是在用户权限下启动的,这就需要特殊配置 VSCode 才能调试程序。
下面介绍如何利用 VSCode 以 root 权限调试程序。
首先需要注意到 launch.json 文件里的 "miDebuggerPath" 这个选项,它是调试器的路径,如果这个调试器可以以 root 权限运行,那么就达成了我们的目的了。
在 /home/user_name 目录下创建文件 gdb,user_name 需要替换为实际的用户名。
然后编辑该文件 vim gdb ,加入下述内容:
给 gdb 添加执行权限,
在修改 "miDebuggerPath" 成为
即可。这样我们就可以在 VSCode 里以 root 权限调试程序了,只不过每次都需要输入密码,因为有一个 sudo 过程。
为了解决这个麻烦,我又在网上找到了方法,将 /home/user_name/gdb 加入 sudo 的免密认证即可。
输入
编辑 /etc/sudoers 文件,修改成下述内容即可,
其中 jackis 是我的用户名,需要根据实际用户名替换。
NOPASSWD: 后的命令 sudo 时都不需要密码。退出 Shell,再重新打开一个命令行界面,输入 sudo apt update ,会发现没有提示输入密码了。
参考:
How to debug programs with “sudo” in VSCODE
How to Run sudo Commands Without Password
delve基础用法及在vscode中的使用
delve 是go语言的调试器,delve的目标是为go提供一个简洁、功能齐全的debug工具,delve易于调用和使用。
为了能够编译delve,需要安装Go 1.10或更高版本
安装好go后,直接go get即可安装,更多安装教程见:
go get github.com/go-delve/delve/cmd/dlv
安装好后,在终端执行dlv或者dlv help 会看到dlv的帮助信息,则说明安装成功
dlv常用命令
delve的目标是成为一个简洁而强大的工具。但如果你不习惯在编译语言中使用源码调试,则可能令人困惑。本文档将提供开始调试go程序所需的全部信息。
调试例子程序如下
├── go.mod
├── go.sum
├── main.go
├── test
└── utils
├── util.go
└── util_test.go
调试程序主要有三个文件,main.go、util.go、util_test.go,内容如下,比较简单,go包管理工具使用的是go module,模块名为test
在vscode debug 的设置中配置launch.json文件
mode 设置为debug时,program的内容${fileDirname}即可,mode 设置为exec时,program的值为二进制文件的路径,通过设置mode的值,即可调试源码和二进制程序(也需要有源码)。mode模式为auto时,测试了下,vscode 并不能通过program的内容来判断是debug还是exec
远程调试时,需要在远程也有源码、二进制包和dlv工具
在远端执行dlv命令
dlv debug --headless --listen=:8989 --api-version=2 --accept-multiclient #用degbug方式启动远程应用程序
dlv exec --headless --listen=:8989 ./test --api-version=2 --accept-multiclient # exec执行当前目录下的test二进制文件
--listen:指定调试端口
--api-version:指定api版本,默认是1
--accept-multiclient:接受多个client调试
在vscode中线下好源码,和远端的源码结构一致。launch.json配置如下:
在vscode中打好断点后,就可以进行远程调试了