📜  Linux 中的 gdb 命令和示例(1)

📅  最后修改于: 2023-12-03 15:32:41.152000             🧑  作者: Mango

Linux 中的 gdb 命令和示例

在 Linux 中使用 gdb 命令可以帮助程序员调试程序,找出程序的错误和调用堆栈等问题。下面是一些 gdb 命令及其示例。

启动 gdb

要启动 gdb,可以在终端中输入以下命令:

gdb <executable>

其中 <executable> 是要调试的可执行文件的名称。

基本调试命令

以下是一些基本的 gdb 调试命令:

  • run:启动程序。
  • break <location>:在指定位置设置断点,例如函数名或行号。
  • continue:从当前位置继续执行程序,直到下一个断点。
  • step:逐语句单步执行程序。
  • next:逐语句单步执行程序,但遇到函数调用时不进入函数内部。
  • backtrace:打印当前调用堆栈。
  • print <expression>:打印表达式的值。
  • info variables:打印当前作用域内的所有变量。
  • quit:退出 gdb。

下面是一些示例:

(gdb) run
(gdb) break main
(gdb) continue
(gdb) next
(gdb) backtrace
(gdb) print x
(gdb) info variables
(gdb) quit
进阶调试命令

以下是一些进阶的 gdb 调试命令:

  • watch <expression>:控制表达式的值,当表达式的值发生变化时,程序停止运行,可以查看变量当前的值。
  • set <variable> = <value>:修改变量的值。

下面是一些示例:

(gdb) watch x
(gdb) set x = 10
调试崩溃程序

当程序崩溃时,可以使用 gdb 进行调试。可以在终端中输入以下命令:

gdb <executable> core.<pid>

其中 <pid> 是程序崩溃时生成的 core 文件,用于保存程序崩溃时的状态信息。

在使用 gdb 调试崩溃程序时,可以使用以下命令:

  • where:打印程序崩溃时的调用堆栈信息。
  • info registers:打印当前寄存器的值。
  • x/<n>x <address>:打印给定地址的 n 个字节的十六进制值。
  • x/<n>i <address>:打印给定地址的 n 个指令的汇编代码。

下面是一些示例:

(gdb) where
(gdb) info registers
(gdb) x/16x $esp
(gdb) x/2i <instruction pointer>
总结

gdb 是 Linux 系统中一个非常强大的调试工具,它可以帮助程序员迅速定位程序的问题。本文介绍了一些常用的 gdb 命令及其示例,供程序员参考。