本文共 2087 字,大约阅读时间需要 6 分钟。
尽管目前使用的VS code可以使用插件一键构建和运行程序,但GDB作为调试利器,还是值得花时间去学习的。
概述
GDB(GNU Debugger) 是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。
参考:
以便在GDB调试环境中能够显示出具体的错误位置。
例:
g++ filename.cpp –g –o filename
在cmake编译中,可以通过可选项 -DCMAKE_VERBOSE_MAKEFILE=1
,具体显示编译过程,保证-g选项在编译过程中使用。
在执行文件所在文件夹里,使用 gdb
命令进入到GDB调试环境中。之后使用 file filename
gdb filename
(filename可执行文件名)。 使用命令 set args parameter
(parameter为输入的参数),加载运行所需的参数。通过 show args
查看加载参数的情况。
例:
set args /home/hello.png 2016 12
使用’show args’后:
/home/hello.png 2016 12
外部文件有修改的情况下,直接在GDB环境中使用“make”进行编译。
使用 r
即可对文件进行执行。
使用 q
退出调试环境。
b linenumber
例:“b 2017”b function
例:“b hello”b *address
例:“b *0x404”若在不同文件上打断点,在行号或函数名前加上文件名和冒号“filename:”。
例:
b hello.cpp:hello b hello.cpp:2017
在1小点方法后面加入条件,断点在条件成立时起停止作用。
例:
b 12 if x > y // 在x > y情况下,断点起作用。
将指定断点号的条件进行修改:
condition breakpointnumber expression
例:
condition 12 if x = y
condition breakpointnumber
停止使用条件,断点不受条件限制使用。
例:
condition 12
info b
info b number
dis breakpointnumber
enable breakpointnumber
p
p variable
例: “p x”p &variable
例: “p &x”p *point
例: “p *pData”s
类似于 step in
s number
进行多步执行n
类似 step over 执行,遇到函数,不进入函数内部,直接执行完函数。
n number
进行多步执行
c
在程序在执行中遇到断点后,使用 c
继续执行
finish
在函数内部使用 finish
,执行完当前整个函数打印返回信息
set var variable = x
将变量设置为x后进行调试
例:
set var tmp = 5
将变量 tmp 设置为5,var关键词确保不产生冲突
bt
where
frame number
进入到该段内部。例:
frame 5
就进入到段5.
up
down
l
l -
l number
l function
(C++代码需要在函数名前加类名,重载函数需要在函数内加参数类型)l filename:linenumber
例:
l hello.cpp:1 // 从hello.cpp第一行开始显示
l filename:function
例:
l hello.cpp:Util::hello // 显示hello.cpp文件下,Util类的函数hello
l fisrt,last
例:
l 1,30 // 从第0行显示到第30行的内容
关于GDB调试的相关文章:
转载地址:http://anykz.baihongyu.com/