gdb调试命令小结_与多文件调试_远程调试

来源:互联网 发布:js ajax 登录验证 编辑:程序博客网 时间:2024/06/06 03:46

摘要:在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>0commandsprintf "x is %d\n",xcontinueend

断点设置在函数foo中,断点条件是x>0,如果程序被断住后,也就是,一旦x的值在foo函数中大于0,GDB会自动打印出x的值,并继续运行程序。

如果你要清除断点上的命令序列,那么只要简单的执行一下commands命令,并直接在打个end就行了。


5)调试界面

最开始使用gdb,最不方便的地方就在于无法在调试的同时观看code;这里,我们使用参数 gdb -tui program 就可以实现如同windows一样的调试界面了,tui的意思是terminal  user interface.
原创粉丝点击