我想说的是,镇他娘的坑爹
折腾了好几天,简单记录,格式难搞,可以作参考,在配合网上其他人解释,大概知道几个关注点就可以了
1,如果你不使用第三方库,只使用了C或者C++的库,那么只需要右键一个task就可以了,这是真的
{"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",//很重要
"command": "/usr/bin/g++",
"args": [ //参数不用多说
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
}
只需要这样,就可以调试了,重点关注下label,还有参数就可以了,注意一个点,是一个文件,a.cpp,默认生成a ,此处可以修改 a.out ,编译基本命令,看下参数
2 重点,第三方库,比如ffmpeg,
由于参数繁琐,我简单写了一个makefile
```cpp
```cpp
a.out:a.cpp
g++ a.cpp -g -I /usr/local/ffmpeg/include -lavcodec -lavdevice \
-lavfilter -lavformat -lavutil -lpostproc -lswresample -lswscale \
-L /usr/local/ffmpeg/lib -Wl,-rpath=/usr/local/ffmpeg/lib -Wl,-rpath-link=/usr/local/ffmpeg/lib \
这个时候只有task.json是不够的,调试那个地方,多次尝试下,比如右键添加配置等等,会给出一个默认的配置launch.json ,如下
```cpp
```cpp
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",//程序名字
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ 生成活动文件",//之前先执行task.json,此处要和task.json的label要对应,那么在使用launch.json进行调试前,会先执行 这个名字的任务。
}
]
}
***```重点关注program和preLaunchTask***
马克makefile已经指定的ffmpeg路径,所以可以愉快调试
```此时的task.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "make", //makefile不用多说
"args": [
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}