cmake 调试与启动(Debugging and launching)
cmake tools移除了一系列配置debugging的复杂操作
因为c和c++项目可能定义有多个可执行文件
创建launch.json可能会变得很困难,繁杂,且容易出错
如果你通过cmake定义了一个可执行对象,cmake工具
将会解析他们,并允许你对他们进行调试
注意 调试只支持cmake服务模式,该模式在3.7.2以上版本的cmake中会自动打开,但在老的版本中是没有任何效果的,对象调试在之前的版本中是支持的,但是很难用,而且容易出错,创造的问题远比解决的多,如果你使用的是老版本的cmake并且想使用对象调试,你必须升级你的cmake版本
默认情况下,在启动(launch)或调试(debug)可执行文件时,会触发build
当然可以关闭该设置,详细看cmake.buildBeforRun
选择启动对象
启动对象和调试对象一开始都是没有设置的
如果你第一次尝试调试一个对象,cmake将会提示你选择调试的目标,并且将对话持久化
点击这个按钮将会显示可启动对象
以及让我们更改启动对象
快速调试(debugging)
快速调试,可以让你启动对象的调试功能,而不用创建launch.json
注意:现在只有mircosoft的vscode-cpptools插件,支持快速调试,如果想了解如何使用launch.json和其他调试方法,可以看下面的"使用cmake-tools和launch.json调试"
快速调试可以使用命令面板中的CMake: Debug目标命令,或者通过按相关的热键来启动(默认是ctrl+F5)
注意:快速调试不允许指定程序参数或其他调试选项,想了解更多选择可以看 “使用cmake-tools和launch.json调试”
使用cmake-tools和launch.json调试
有时,调试的需求会更加复杂,比如设置工作目录,提供命令行参数,也有人可能会想用其他调试器,而不是用mocrosoft的vscode-cpptools所包含的
所有的这些需求,都可以使用launch.json来解决,
使用launch.json的最大困难是事先指定可执行文件的路径,
cmake Tools可以在launch.json通过命令替换的方式提供帮助
这适用于附加到进程时的程序选择,
它可以通过在launch.json合适的地方使用基于命令的替换,从而正常工作.
下面这是一个使用了cmake.launchTargetPath 和 cmake.launchTargetDirectory去调试启动选定对象的launch.json的小例子
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
// Resolved by CMake Tools:
"program": "${command:cmake.launchTargetPath}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [
{
// add the directory where our target was built to the PATHs
// it gets resolved by CMake Tools:
"name": "PATH",
"value": "$PATH:${command:cmake.launchTargetDirectory}"
},
{
"name": "OTHER_VALUE",
"value": "Something something"
}
],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
program属性的值通过cmake tools解析为要运行程序的绝对路径
注意:必须先成功执行配置文件,之后cmake.launchTargetPath和cmake.launchTargetDirectory才会被正确解析
运行对象而不调试
有时,只想运行对象看输出结果,这可以使用cmake:Execute the current target without a debugger 命令,或者关联热键(默认Shift+F5)
输出将会展示在集成的终端中