码迷,mamicode.com
首页 > 数据库 > 详细

gdb,程序调试助手

时间:2017-07-22 12:01:30      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:image   线程   条件   执行文件   环境   意思   参数   断点   多文件   

启动GDB:(其中我的app是编译之后的可执行文件)

技术分享

退出命令:quit或者简写q

帮助获取:

gdb通过完备的在线帮助,使我们使用起来更加方便.所有的帮助信息都是通过help命令获得的,运行help命令时,如果不指定参数,gdb将输出分类信息:

技术分享

可以通过分类名作为help指定的参数来获得帮助,以断点(breakpoint)为例:

技术分享

在gdb调试中,有几个注意点可以提高调试效率,第一,如果输入的命令开头字母能唯一标识这个命令,则后面的命令可以不用输入,例如退出命令quit,只输入q就已经是唯一标识的命令了,其他命令没有q开头的,故,我们可以直接输入q,然后回车就可以达到输入quit的作用,第二,gdb中也可以师徒TAB补全指令,第三,对于大多数的命令都可以 以直接按回车(Enter)的方式运行前面执行过的命令.

现在我们调试一个简单的程序,运用断点:

 

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     for(int i=0;i<10;i++)
 5     {
 6         printf("i=%d\n",i);
 7         printf("GDB test\n");
 8     }
 9     return 0;
10

这里需要解释几个命令:

设置断点,break命令;

我们把断点设置在main函数的第4行:

技术分享

main.c:4表示main函数的第四行,这样写是有意义的而且是推荐的做法,在多文件中操作时更清晰.

断点(BreakPoint)

  • 设置断点:(threadno 指定了线程的 ID,注意,这个 ID 是 gdb 分配的,可以通过 "info threads" 命令来查看正在运行程序中的线程信息)
    • break thread <threadno> -- break命令没有参数时,表示在下一条指令处停住.
    • break +offset thread <threadno> -- 在当前行号的后面的 offset 行停住.(offiset 为自然数)
    • break -offset thread <threadno> -- 在当前行号的前面的 offset 行停住.(offiset 为自然数)
    • break <linenum> thread <threadno> -- 在指定行号停住.
    • break filename:linenum thread <threadno> -- 在源文件filename的linenum行处停住.
    • break <function> thread <threadno> -- 在进入指定函数时停住.
    • break filename:function thread <threadno> --在源文件filename的function函数的入口处停住.
    • break *address -- 在程序运行的内存地址处停住.
    • break ... thread <threadno> if <condition> -- ...可以是上述的参数,condition表示条件,在条件成立时停住.比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序.
    • tbreak -- 设置只停止一次的断点.用法和 break 类似
  • 查看断点
    • info breakpoints [n]
    • info break [n]

观察点(WatchPoint) -- 观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序.

  • 设在观察点
    • watch <expr> -- 为表达式(变量)expr设置一个观察点.一量表达式值有变化时,马上停住程序.
    • rwatch <expr> -- 当表达式(变量)expr被读时,停住程序.
    • awatch <expr> -- 当表达式(变量)的值被读或被写时,停住程序.
  • 查看观察点
    • info watchpoints -- 列出当前所设置了的所有观察点

技术分享

这样,我们使用最基本的调试方法,实现断点和查看变量的值,其中next命令(简写n)是单挑语句执行,下一步的的意思.

gdb,程序调试助手

标签:image   线程   条件   执行文件   环境   意思   参数   断点   多文件   

原文地址:http://www.cnblogs.com/yangguang-it/p/7220596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!