linux下如何用GDB调试c++程序
[https://www.cnblogs.com/zhoug2020/p/7283169.html]
进入到测试例子后开gdb
history命令可以看到前面的cmd
打印变量的值
print/p
打印变量的地址
print&
执行下一步
n/next
单步进入
(gdb) step
这样,也会执行一行代码,不过如果遇到函数的话就会进入函数的内部,再一行一行的执行。
执行完当前函数返回到调用它的函数
(gdb) finish
这里,运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish.
设定断点
break/b
(gdb) break 46 if testsize100
这里,如果testsize100就在46行处断点。
检测表达式变化则停住
(gdb) watch i != 10
这里,i != 10这个表达式一旦变化,则停住。watch
在当前的文件中为某一函数(假设为func)处设定断点
(gdb) break func
给指定文件(fileName)的某个行(N)处设置断点
(gdb) break fileName:N
这里,给某文件中的函数设置断点是同理的
显示当前gdb断点信息
(gdb) info breakpoints
这里,可以简写为info break.会显示当前所有的断点,断点号,断点位置等等。
删除N号断点
(gdb) delete N
删除所有断点
(gdb) delete
显示当前调用函数堆栈中的函数
(gdb) backtrace
命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。当然,这里也会显示出当前运行到了哪里(文件,行)。
如果a是一个数组,10个元素,如果要显示则
(gdb) print *a@10
这样,会显示10个元素,无论a是double或者是int的都会正确地显示10个元素。
修改运行时候的变量值
(gdb) print x=4
这里,x=4是C/C++的语法,意为把变量x值改为4,如果你当前调试的语言是Pascal,那么你可以使用Pascal的语法:x:=4。
显示一个变量var的类型
(gdb) whatis var
以更详细的方式显示变量var的类型
(gdb) ptype var
这里,会打印出var的结构定义。
在terminal调出代码界面
(gdb)-
调出当前运行的cc文件页面
(gdb)up
(gdb)do(down)
在代码页面进入上一个/下一个函数
关掉代码界面用 ctrl +x+a
报错后显示卡住的当前函数及调用的子函数
bt
print和x的区别
print i
x &i