摘要:在vs2010下,我们调试起来相当方便,但是使用gdb调试的时候,却困难重重。本文主要为你介绍如何在gdb下进行调试和如何将gdb打造成一个集成的编译环境。
1.gdb命令小结
设置断点:break(b) linenum
b functionname
如果是在调试多个文件,可以这样设置断点:
(gdb) break [<file-name>:]<func-name> (gdb) break [<file-name>:]<line-num> |
跳转:
从当前函数退出:finish
从当前循环退出:until
查看:
变量的值:p name
代码:list linenum
list funcname
运行:
运行到地一句:start
连续运行:run
继续运行:continue
单步运行:next
进入函数内部:step
2.gdb的替代——集成开发环境
linux下的调试环境,如果使用vim和gdb会很容易让人崩溃,此时我们不妨在调试的时候使用一些IDE,比如Anjuta
3.其他的一些集成环境
此处有免费的10个C/C++集成开发环境。
4.多文件调试
在实际工程中,往往有多个文件,此时需要跨越文件进行调试。例如,我们在stack.c中定义了pop、push等操作,在main.c中引用了这些操作,假如在main.c的第10行引用了push,我们可以这样写:
b main.c:10
设定断点,然后使用step命令,进入函数内部进行调试。
5.自动显示:
如果我们比较关心某个变量,必然很想知道程序每次执行停下来的时候,该变量的值,这里,我们用到了display命令:
display <expr> display/<fmt> <expr> display/<fmt> <addr>gdb attach 调试
远程调试
远程调试的原理
远程调试的方法
远程调试的相关问题
5.几个常用的需求
1)条件断点:在满足某个条件的时候才设置断点:
break 30 if x==3
info break
2)观察点:一旦某个表达式的值有变化,立马停止程序:
watch expr
3)观察点的禁用与删除:
删除设置在某一行的断点:
clear 39
删除第几个断点:
d 1
禁用第几个断点:
disable 1
4)自动化调试
说明:我们使用断点的目的,往往是希望程序停留在某处,这样好让我们查看某个变量的值;但是,如果每次都输出print相关变量的数值,这样会造成时间上的浪费,所以,我们可以进行自动化调试,这样每次程序运行到某个地方,自动打印相关变量的值。
break foo if x>0 commands printf "x is %d\n",x continue end
断点设置在函数foo中,断点条件是x>0,如果程序被断住后,也就是,一旦x的值在foo函数中大于0,GDB会自动打印出x的值,并继续运行程序。
如果你要清除断点上的命令序列,那么只要简单的执行一下commands命令,并直接在打个end就行了。
最开始使用gdb,最不方便的地方就在于无法在调试的同时观看code;这里,我们使用参数 gdb -tui program 就可以实现如同windows一样的调试界面了,tui的意思是terminal user interface.