前面一节简单的介绍了VSCODE的简单调试功能,对于复杂的调试应用需要我们配置launch.json
调试器配置文件。
type:启动配置的调试器类型(Debugger)。每一个语言一般都会提供一种调试器类型,C++为cppdbg,Lua为LuaHelper-Debug,具体名字看插件如何定义。
request:请求类型。目前只支持两种类型launch和attach。
name:一个可读的名字,在配置下拉可以识别的。如下图的LuaHelper-DebugFile下的Attach和DebugFille
- presentation:order、group和hidden属性定义调试配置的显示,你可以根据这个来调整配置的显示次序、隐藏等操作
- preLaunchTask:在Debug之前需要执行的task任务。对应好tasks.json的label,或者在tasks设置
${defaultBuildTask}
- postDebugTask:Debug之后需要执行的任务,这个任务需要与tasks.json的label对应
- internalConsoleOptions:选择调试时调试输出的面板是否打开
- debugServer:插件作者使用,暂时不了解
- serverReadyAction:设置调试时自动在浏览器打开URL
- program:当调试启动时运行的可执行程序
- args:可执行程序的参数
- env:环境变量
- envFile:环境变量相关
- cwd:当前默认工作目录,也就是寻找文件或者以来的路径,默认
$workspaceFolder$
- port:要附加到的进程的端口
- stopOnEntry:是否在程序入口处断点
- console:指定程序输出位置
- internalConsole:VSCODE的调试控制台
- integratedTerminal:VSCODE的集成终端
- externalTerminal:系统的终端
当然了,作为跨平台的VSCODE肯定回对不同系统的配置进行识别:
- “windows”
- “osx”
- “linux”
如,windows为1,其他程序为2,可以这么写:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/node_modules/gulp/bin/gulpfile.js",
"args": ["2"],
"windows": {
"args": ["1"]
}
}
]
}
多目标调试,可以使用compounds
选项。
PS:如果不知道某个值都可以有哪个值,可以加个冒号看智能提示
二、变量替换 2.1 VSCODE和CMAKE内部变量辅助任务一个程序可以通过环境变量来访问系统中的文件和程序,之所以这么做是为了“泛化”文件路径,我不需要知道这个系统具体将该文件(目录)或者程序放在哪个位置,只需要在程序中通过变量来访问,有些变量可能随着你的操作如,我们在shell程序中切换目录会改变PWD和OLDPWD变量的值。
对于某些程序如:CMAKE MAKE和VSCODE为了方便用户对文件(目录)的选中,还会设置若干该程序独有的环境变量,如VSCODE的$currentWorkspaceFolder$
,CMake的CMakelists.txt所在目录$PROJECT_SOURCE_DIR$
。对于编译而言,一切内置变量是为了帮助我们完成编译等任务所需要的一些常见变量。
一般这些运行在shell的程序还可以通过调用环境变量,之所以需要这个环境变量,这是因为为了获取当前编译与所处的系统环境的关系。如VSCODE则可以通过语法$env:Name$
来访问系统的环境变量;CMake也有类似语法:$ENV{NAME})
。VSCODE详细内部变量可以在这里查看:https://code.visualstudio.com/docs/editor/variables-reference