咱就是说,gdb手动调试不太直观,cmake又没来得及学!!!
正常来说都是win系统下vscode连接ubuntu来进行开发,而在vscode中配置调试文件总是不成功,尤其是有makefile的情况下,捣鼓很久加参考大神,终于搞好,以下仅作为配置记录
调用调试的时候会自动创建这两个文件,如果没有就手动创建即可
先介绍我的文件构造,工作文件目录为/home/knight/PCM2AAC,而我的可执行文件名为pcm2aac,且我希望能够调用自己写的makefile 来进行编译,并且希望给main传参
PCM2AAC
├── bin
│ ├── jpg_pcm_open_48000hz
│ ├── jpg_pcm_open_48000hz.aac
│ └── jpg_pcm_open_48000hz.pcm
├── include
│ ├── faaccfg.h
│ └── faac.h
├── lib
│ ├── libfaac.a
│ ├── libfaac.la
│ ├── libfaac.so
│ ├── libfaac.so.0
│ └── libfaac.so.0.0.0
├── main.c
├── Makefile
└── pcm2aac
第一步配置tasks.json文件如下:
此文件会完成编译的过程;
重要的就是里面的路径,如果把握不准就建议都直接改成绝对路径
//tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "g++", // 任务名称,与launch.json的preLaunchTask相对应
//使用makefile编译的情况:
"command": "make", //命令,与在终端编译的参数一样
"args": [],
// //使用g++编译的情况,这里面的workspaceFolder最好也改成绝对路径
// "command": "g++", //命令,与在终端编译的参数一样
// "args": [
// "-g",
// "${workspaceFolder}/*.cpp",
// "${workspaceFolder}/src/*.cpp",
// "-o",
// "${workspaceFolder}/test", //输出的可执行文件可以不要后缀名,为了方便:)
// "-I", //指定头文件路径
// "${workspaceFolder}/include"
// ],
"options": {
// 设置 make 命令的工作目录为 PCM2AAC 文件夹
"cwd": "/home/knight/PCM2AAC"
}
}
]
}
接着配置launch.json文件
同样的里面的路径最好都写成绝对路径,如果和我一样需要传参的就把需要传递的命令写在args[];
//launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
// 配置名称,将会在启动配置的下拉菜单中显示
"name": "PCM2AAC build",
//"name": "AAC2PCM build",
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
// 将要进行调试的程序的路径,在linux中文件的后缀名不是那么重要,这里可以不添加,但要与tasks.json的输出一致
"program": "/home/knight/PCM2AAC/pcm2aac",
"args": [
"./pcm2aac --h",
// "./pcm2aac --help",
// "./pcm2aac -i ./bin/jpg_pcm_open_48000hz.pcm -r 48000 -b 16 -c 2 -o ./bin/jpg_pcm_open_48000hz.aac",
// "./pcm2aac --input_pcmfile=./bin/jpg_pcm_open_48000hz.pcm --sample_rate=48000 --sample_bits=16 --channels=2 --output_aacfile=./bin/jpg_pcm_open_48000hz.aac"
], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处
// 调试程序时的工作目录,在当前的工作路径即可,总之还是要与tasks.json的配置一致
"cwd": "/home/knight/PCM2AAC",
//"cwd": "/home/knight/AAC2PCM",
"environment": [],
//注意,如果是远程连接linux调试,一定要用false:
"externalConsole": false, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",// 指定连接的调试器,可以为gdb或lldb。
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的taskName相对应
"miDebuggerPath": "/usr/bin/gdb" // 调试器路径。
}
]
}
如果需要调试不同的项目,把里面的路径以及可执行文件进行对应的替换就可以了。
参考:vscode远程连接ubuntu使用gdb调试C++代码_vscode gdb远程调试c++程序没有进入断点-优快云博客