Linux 之二:GDB调试命令

1. 什么是gdb

  gdb(GNU symbolic debugger)是GNU开源组织发布的一个强大的Linux下的程序调试工具(GNU Project 调试器),它使你可以查看另一个程序在“执行”期间正在执行的操作,或该程序崩溃时正在执行的操作。
  gdb主要可以如下4个方面的事情:
  (1)启动我们的程序,可以按照我们的自定义的要求随心所欲的运行程序。
  (2)使程序在指定条件下停止。
  (3)检查程序停止时发生的情况。
  (4)更改程序中的内容,以便我们可以尝试纠正一个错误的影响,然后继续学习另一个错误。

2. gdb调试命令

  写在前面:gdb调试的是可执行文件,而且这个可执行文件必须带有调试信息才行(gcc编译时必须带有-g参数),而非.c文件(源文件),例如我们有一个名为e_test的可执行文件,启动e_tset调试的方法为:gdb ./e_test 。
在这里插入图片描述

2.1 运行指令(Program running commands)

说  明:以下这些命令用于运行程序。
指  令

  • (gdb) run(简称 r):全速运行程序,直到遇到“断点”或“程序产生错误”时停止。
  • (gdb) continue (简称 c):继续运行程序,直到遇到下一个断点或错误。
  • (gdb) finish :运行程序,直到当前函数(function)执行完成。
  • (gdb) step(简称 s):执行下一行程序(若下一行是个函数,则会进入函数体内)。
  • (gdb) step N (简称 s N) :执行下N行代码。
  • (gdb) stepi (简称 si):执行完一条机器指令,然后停止并返回到调试器。
  • (gdb) next (简称 n):执行下一行代码,与s类似,但是next不进入函数体。
  • (gdb) nexti (简称 ni):执行一条机器指令。如果是一个函数调用,则该命令将继续执行,直到函数返回。
  • (gdb) until (简称 u):在堆栈中上升一层,该命令用于避免单步执行循环多次。
  • (gdb) until N (简称 u N):执行运行程序,直到当前行前面已经运行了N行代码。

2.2 断点指令(Breakpoint commands)

说  明:该命令在指定位置设置软件断点,断点可以是函数名、行号或指令地址。
指  令

  • (gdb) b main:在main函数入口设置断点。
  • (gdb) b:在当前行设置断点。
  • (gdb) b \<n>:在第n行设置断点。
  • (gdb) b +\<n>:在当前行之后(forward)的第n行设置断点。
  • (gdb) b -\<n>:在当前行之前(backward)的第n行设置断点。
  • (gdb) b \<function>:在function函数处设置断点。
  • (gdb) b \<filename>:<linenum>:在某个文件(filename)的第linenum行设置断点。
  • (gdb) b <filename>:<function> :在某个文件(filename)的函数(function)处设置断点。
  • (gdb) b * \<address> :在地址(address)处设置断点。

2.3 回溯指令(Backtrace command)

说  明:回溯指令(简称bt)可以打印整个堆栈的信息。在任何时候,均可以通过输入系统中断字符(Ctrl + c)停止回溯。
指  令

  • (gdb) bt:查看栈信息。

猜你喜欢

转载自blog.csdn.net/KXue0703/article/details/119853609