VS_code Debugging (launch.json以及如何在VS_code上调试)
One of the key features of Visual Studio Code is its great debugging support. VS Code’s built-in debugger helps accelerate your edit, compile, and debug loop.
Debugger的下载
VS内部自带对Node.js runtime的debugger工具可以调试JavaScript,TypeScript以及任何其他被转译为 JavaScript 的语言。
Start debugging
以下的文档都是以Node.js debugger为例,但是大多数的概念和特点也能运用到其他调试器上.
点击左边栏的”Run and Debug“按键会在界面上方出现一个[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
注意的是==如果Running and Debugging还没有配置好==,则需要创建launch.json文件.:
Launch configurations(运行配置)
对于大多数调试场景,创建一个launch configuration file是非常有必要的,因为它运行你配置和保存调试设置细节。
- 位置:launch.json文件存放在 你项目的根目录(workspace)的.vscode文件夹中.
- 注意点:不同的debugger调试器的launch.json文件的属性是可以不同的,因此如果在书写launch.json中出现了绿色横线时,需要注意并将其修复.
启动与附加配置(Launch versus attach configurations)
Add a configuration
- 在launch.json中选择名为”Launch Program“的配置.一旦你有了launch configuration集合,就可以调试了.
Debug Actions
-
一旦开始调试,则debug toolbar就会出现在编辑器的顶部.
Breakpoints
当一个调试会话开始时,如果断点不能被注册到则调试器就会将其变成a gray hollow circle.如果debugger不支持实时运行调试,则在源代码正在修改的同时开启调试会话也会这样.
Launch.json attributes
以下每个属性对于每个启动配置(调试器)都是必须的
- “type”:含义就是你用的是哪个语言的debugger. node是内置的node.js调试器,以上的是python调试器
- "request:"决定了launch配置的种类,是launch还是attach.(前者用于调试新启动进程,后者用于调试运行中进程。)
- “name”:是你配置的名字,随便取.
以下每个属性对于每个启动配置(调试器)都是支持的但是可选
许多调试器都支持的以下一些属性
- ”program:“ 在启动调试器的时候选择要执行的文件地址,
- “args”:传递给program调试的参数
- ”env“:环境变量(the value
null
can be used to “undefine” a variable) - ”cwd“:用于查找依赖项和其他文件的当前工作目录
- ”port“:当attach一个正在运行的程序时的端口号
console
- what kind of console to use, for example,internalConsole
,integratedTerminal
, orexternalTerminal
变量替换
**${workspaceFolder}:**给出工作区(workspace)文件夹的根路径
${file}: 在活动编辑器中打开的文件
${env:name}: ’Name‘的环境变量
特定平台的属性
“windows”,“linux”,“osx”
在操作系统特定范围中定义的属性会覆盖在全局范围中定义的属性。
请注意 type 属性不能放在特定于平台的部分中,因为 type 间接决定了远程调试场景中的平台,这将导致循环依赖
高级断点主题
VS code 调试器的特点是能够根据表达式、命中计数或两者的组合设置条件断点.
表达式条件(expression condition):只要表达式的计算结果为真,就会触发断点.
命中次数(Hit count):控制断点在“中断”执行之前需要命中多少次。
以上两个断点方式也支持function和exception断点
内联断点(inline breakpoints)
只有当执行到达与内联断点关联的列时,才会命中内联断点,当调试在一行中包含多条语句的小型代码({}括起来)时很有用,例如for循环:
函数断点(function breakpoints)
调试器可以通过指定函数名称来支持创建断点,而不是直接在源代码中放置断点
适用的场景:
函数源代码未知的情况下但是函数名已经知道
数据断点(Data breakpoints)
如果调试器支持数据断点,则可以从 VARIABLES 视图设置它们,并在底层变量的值更改时受到影响。数据断点在 BREAKPOINTS 部分以红色六边形显示。
复合启动配置(launch configurations)
**启动多个调试会话的另一种方法是使用复合启动配置。**复合启动配置列出了应该并行启动的两个或多个启动配置的名称
在compounds属性中
"preLaunchTask": 可以指定在各个调试会话开始之前运行的步骤.
"stopAll:"控制手动终止一个会话是否会停止所有复合会话。