工作中碰到一个问题,在与上位机qt界面联调过程中要看很多入口,出口变量的值,并且公司的VScode没配gdb。(既然界面没用调试,之前是如何debug的呢?答案是手动输gdb指令,或手动断点,之前找段错误问题就写一个 while(1)让程序卡死在某地方达到手动打断的效果),但这次问题太多,手动一个个 printf
这也太不优雅了吧。我实在受不鸟了,从网上学习了一下,在VScode上使用gdb调试。
launch.json
choose Run > Add Configuration... and then choose C++ (GDB/LLDB).
配置如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "`${workspaceFolder}/build/vdj_hil_simulator`",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "vdj build", //与tasks.json 的label项目同名
"miDebuggerPath": "${workspaceFolder}/gdb_sudo.sh"
}
]
}
因为项目用到了多线程,所以需要管理员权限才能正常启动程序,否则无法创建线程。而vscode默认不是用管理员执行gdb的。解决权限的方法很简单。新建一个gdb_sudo.sh文件,里面填入如下文本。
#!/bin/sh
sudo /usr/bin/gdb "$@"
gdb_sudo.sh
对应miDebuggerPath
的路径。使用此方法需要保证执行sudo
不需要密码。具体方法我就不介绍了。
tasks.json
添加tasks.json并修改内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "vdj build"", //编译项目
"type": "shell",
"command": "cd ./build ;cmake .. ;make", //编译命令
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
其他问题
如果点击debug还是没有反应,请检查gdb_sudo.sh
有没有运行权限。
终端输入ls
可列出当前目录下文件。可执行文件的高亮与普通不一样,我这里是绿色
如果没有执行权限,输入以下命令获取运行权限
chmod +x gdb_sudo.sh
在windows下编辑后,或git下载后导入linux也可能会无法执行,这是因为linux与window换行符不一致,linux解析脚本错误导致的。需要在在终端输入以下命令将换行符号替换一下修复。
sed -i 's/\r//g' gdb_sudo.sh
5 条评论
《貂蝉1958国语》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/28974.html
《逃离“自由”电影院》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/3528.html
真棒!
《小阴谋大爱情》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/55624.html
不错不错,我喜欢看 https://www.ea55.com/