VSCode远程调试linux环境的C/C++(二)-优快云博客
接着前一篇继续学习
前面试着远程调试了个简单的C++程序,但实际项目模块很多,还用了很多第三方库,本来说是学习下CMAKE的,后来想着tasks.json中既然可以定义先cmake再make,那我本来已经make过的项目可以只选择make就可以了,再配置个launch.json是不是也可以加断点调试了,试了下果然可以,这比linux下调试方便多了。
先打开整个项目的文件夹,按F5,选择添加launch.json,把以前的sh启动脚本放到launch.json里
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/3rdlibs/appTest",
"args": [
"--load=../../config/app/init.cfg"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/bin/debug/app",
"environment": [
{"name": "PATH", "value": "./:../../3rdlibs:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/uu sr/local/games:/usr/local/ssl/bin:/usr/ntp/bin"},
{"name": "LD_LIBRARY_PATH", "value": "./:../../3rdlibs:$LD_LIBRARY_PATH"}
],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "Build",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
主要修改了
- "program":启动程序的路径
- "args":加在"program"后面的参数
- "cwd":执行路径
- "environment":一些路径,sh里面原本是下面这样
PATH=./:../../3rdlibs:$PATH
LD_LIBRARY_PATH=./:../../3rdlibs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH PATH
但我直接改成下面这样,c++代码里调用的ping,du之类的指令都not found
"environment": [
{"name": "PATH", "value": "./:../../3rdlibs:$PATH"},
{"name": "LD_LIBRARY_PATH", "value": "./:../../3rdlibs:$LD_LIBRARY_PATH"}
],
只好linux里面echo $PATH,然后全拷贝到"environment"里面了,有什么更好的办法可以指教下
再添加tasks.json,只有make的流程
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}"
},
"tasks": [
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "make",
"args": [
]
},
{
"label": "Build",
"dependsOrder": "sequence", // 按列出的顺序执行任务依赖项
"dependsOn":[
"make"
]
}
]
}
再跟前一篇一样F9加断点,F5开始跑就可以单步调试了。。