记GDB常用操作命令

GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。如某个变量、查看内存的堆栈内容
4、动态的改变你程序的执行环境。

启动GDB的方法有以下几种:
1、gdb program
    program 也就是你的执行文件,一般在当前目录下。
2、gdb program core
    用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
3、gdb program 1234
    如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
    
常用命令:
file 加载程序       list 显示源码        run 运行程序       break 设置断点

file [可执行程序]
list 简写l。 查看原代码(list n,从第n行开始查看代码。list 函数名:查看具体函数)
    list   |  list n行号    |   list n1,n2   |   list function函数名
run  重新开始运行文件(run text:加载文本文件,run bin:加载二进制文件),简写r
    run arg1 arg2 ......
break 让程序暂停,查看相关变量和某内存地址内容。简写b     设置断点后执行run
    break n  |    break function函数名 
    非当前源文件的断点 break filename:n 或者 break filename:func |  条件停止 break n if expr 或 break func if expr

>>> segmentfault都是由于指针被误删或者访问空指针、或者越界等造成的 <<<

===========  GDB ===========
-------- 调试正在运行的程序:------gdb attach PID  或  gdb ${你的程序} ${程序pid}
gdb attach 65427   
b ASVR_OnCtiEVTEvent // 设置函数断点 b Breakpoint
c                   //继续  c Continuing.
n                   //下一步 n next= enter
p tmpIdx            //打印  print

-------- 查core:------gdb ${你的程序} ${core文件}
bt      //显示栈信息或where。   backtrace
f num   //跳转到core堆栈的第num帧
p       //打印

--------:没有调试信息的情况下找core的代码行
bt      //
f num     //跳转到core堆栈的第num帧
disassemble         //  打开该帧函数的反汇编代码
shell echo 汇编码 |C++filt     //去掉函数的名词修饰
i f     //info frame查看堆栈寄存器信息

---------查看core进程的所有 线程 堆栈 ---------
info threads    //查看所有线程正在运行的指令信息 和 threadID

thread apply all bt     //打开所有线程的堆栈信息
thread apply threadID bt     //查看指定线程堆栈信息

thread threadID    //进入指定线程栈空间
bt

---------调试编译的程序 gdb ${你的程序}
b ${断点}  //break 函数,行  b gdb_test.c:3 或 fun
r //run  执行
n //next 下一行
s //Step Into 进入函数


 

扫描二维码关注公众号,回复: 15274114 查看本文章

猜你喜欢

转载自blog.csdn.net/lr94V587/article/details/125225422