gdb,程序调试助手

启动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)是单挑语句执行,下一步的的意思.

时间: 2024-12-28 18:09:45

gdb,程序调试助手的相关文章

GDB 程序调试简单实践

用了好久的GCC/G++ 却一直都没用过GDB调试过程序,有时程序不是很大,一般有错,直接看编译器编译结果就差不多知道错在哪儿了,或者使用codeblocks单步调试,甚至回到windows下面调试,但是总是不太方便,因此有必要看一下GDB调试方法和基本步骤. 下面是一个简单的演示: 首先创建一个有错误的代码,如下: 这个程序很简单,目的是接受用户的输入,并将用户的输入回应输出来. 但是这个程序的第17行有个错误,使用了未初始化的字符指针name,因此编译运行后会出现段错误,如下: 下面利用GD

001编程基础----GDB程序调试

一.GDB是GNU发布的程序调试工具.有三方面功能: 1.启动被调试程序. 2.让被调试程序在指定位置停住. 3.当程序被停住时,可以检查程序状态(如变量值). 二.GDB调试步骤: 1.编译生成可执行文件 gcc -g hell.c -o hello 2.启动GDB gdb hello 3.在main函数处设置断点 break main(或b main) 4.运行程序 run 5.单步 next 6.继续运行 continue(或c) 7.退出GDB   quit 三.GDB命令的常用操作 l

1、GDB程序调试

GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具.一般来说GDB主要完成下面四个部分的功能. 1)启动你的程序,可以按照你的自定义的要求运行程序. 2)可让被调试程序在你所指定的调试的断点处停住(断点可以使条件表达式). 3)当程序被停住时.可以检查此时你的程序中所发生的事,包括查看当前状态下程序中指定变量的值. 4)动态的改变你程序的执行环境. 步骤: 1.先使用vi编辑器编辑文件test.c,用于GDB调试器调试. 2.使用命令gcc -g test.c -o test,编译

Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

使用 GNU GCC 和 GDB 开发调试应用程序

gcc 命令的使用 在使用GCC编译程序时,编译过程可以被细分为四个阶段: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 如果不加任何参数, gcc 默认执行所有的操作,直接生成可执行文件. 以上四个阶段对应参数为: 1.        -E  只执行预处理 2.        –S  只编译,不汇编和链接 3.        –c  编译汇编不链接 4.        –o  链接成目标文件 GCC常用选项 -c 通知

windows下使用MinGW的调试工具gdb.exe调试C程序

1.编译源代码 C:MinGW\bin>gcc.exe -g -o program.exe program.c 编译选项上要加上“g”,这样生成的目标程序会含有调试内容,再用gdb调试的时候才能使用.显然加上“g”选项生成的应用程序会比不加的大,但两者运行时没有差别. 2.启动调试 C:MinGW\bin>gdb.exe program.exe 3.设置断点并启动运行 (gdb)break main(gdb)start 不能直接start,因为程序运行太快了,直接start就运行到程序停止的地

程序调试命令gdb

锁定线程 set scheduler-locking 1.要使用此命令,先用gcc -g编译程序,如:  $gcc -g test.c -o test  编译test.c源程序,输入此程序的调试版本test 2.调试程序  $gdb test //调试可执行程序test  $(gdb)start //使用程序test开始运行    列出指定函数的源代码,或列出指定行号开始的源程序  $(gdb)list 函数名  $(gdb)list 行号    backtrace(或bt) 查看各级函数调用及

用GDB远程调试android native程序

上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了.有几个关键点: 1 gdb和gdbserver 因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver gdbserver的是在 android-ndk-r9\prebuilt\android-arm\gdbserver 这个目录下 gdb 是在 android-ndk-r9\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bi

用gdb+nm调试php c extension程序

.so写好了是给php脚本调用的,如果php脚本执行崩掉了,.so也只能在进程中饮恨而终,这时候php脚本调试经常用的echo, print_r, var_dump都派不上用场了.即使能打印一点儿错误log出来,但也是只见表象,不知内情,根本解决不了一些诡异的bug.还好我们有gdb,下面就 通过4步搞定php c extension的调试. if test -z "$PHP_DEBUG"; then     AC_ARG_ENABLE(debug,     [         --e