1、gdb enable pretty printing


  1. 启动gdb, 用info pretty-printer查看gdb是否支持pretty-printer
  2. 如果不支持则需要重新编译gdb:
    2.1、yum install python-devel -y
    2.2、./configure --prefix=/usr/local/gdb --with-python=/usr/bin/python2.7
    2.3、~/.gdbinit 中写入如下内容,其中 /usr/share/gcc-9.4.0/python是python pretty printing目录,一般gcc都会自带,填上gcc自带的目录即可。如果没有也可以下载: svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc+±v3/python
python
import sys
sys.path.insert(0, '/usr/share/gcc-9.4.0/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
  1. 编译出来的gdb要加入环境变量,确保第一个被找到,然后就支持pretty-printer功能了

2、本机gdb 启动 本机进程 调试


  1. vscode菜单,运行–》添加配置–》c++(gdb/lldb)–》默认配置
  2. 会在 .vscode目录下,产生一个新的文件 launch.json
  3. 双击文件launch.json,可以看到文件内容,此时的配置内容是默认是 c/c++:(gdb)启动模式,意味着 会通过gdb 启动进程
  4. “program” 填写 可执行文件的全路径。例如:"/opt/dev/build/bin/hello_world"
  5. “args” 填写 传给可执行文件的启动参数。例如:“-a"
  6. F5就可以在vscode 下断点,调试了。大部分调试功能还是有的。比起gdb命令行操作简单些,且一次性可以看很多变量值

3、本机gdb attach 本机进程 调试


  1. 与2中步骤1,2,3相同操作
  2. 点击右下角 “添加配置”按钮
  3. 选择c/c++:(gdb)附加模式,同时注释不需要的 《(gdb)启动模式》配置
  4. “program” 填写 可执行文件的全路径。例如:"/opt/dev/build/bin/hello_world"
  5. “processId” 填写附加进程id
  6. F5就可以在vscode 下断点,调试了

4、本机gdb 连接远程gdbserver attach远程进程 调试


  1. 远程机器开启gdbserver,同时附加到被调试进程,gdbserver 0.0.0.0:2333 --attach pid
  2. 与2中步骤1,2,3相同操作
  3. 点击右下角 “添加配置”按钮,选择 c/c++:(gdb)启动模式。注释不需要的 《(gdb)启动模式》配置
  4. “program” 填写 可执行文件的全路径。这个路径是本机路径,不是远程机器路径。例如:"/opt/dev/build/bin/hello_world"
  5. “miDebuggerServerAddress”:“192.168.23.51:2333”,远程机器ip和远程gdbserver端口。
  6. “setupCommands” 另加入一组设置,用于看长字符串。
{
"text":"-interpreter-exec console \"set print elements 0\" ",
"ignoreFailures":true
}

F5就可以在vscode 下断点,调试远程机器进程了


追加注意:
因为vscode启动调试时,默认是不重新编译源码的,所以很可能会导致调试的是老代码,然后很郁闷,我明明改了代码啊,为什么不起作用???
所以很有必要设置启动前编译源码!!!
终端 ->配置默认生成任务 -> 使用模板创建tasks.json文件 -> Others

{
	"version":"2.0.0",
	"tasks":[
	{
		"label":"echo",
		"type":"shell",
		"command":"echo Hello"
	}
	]
}

按实际项目修改为如下样式

{
	"version":"2.0.0",
	"tasks":[
	{
		"label":"build xxx",//自己定义
		"type":"shell",
		"command":"make -j4",//数字根据机器配置
		"options":{
			"cwd":"/root/haha/source/build" //执行make -j4的全路径
		},
		"group":{
			"kind":"build",
			"isDefault":true //默认任务
		}
	}
	]
}

最后在 launch.json中,加入一个字段"preLaunchTask": “build xxx”,其中
“build xxx” 就是上面json中的label。
至此,调试前自动编译源码就实现了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐