GDB使用手册(三)、如何启动及退出GDB调试(被调试程序的GDB启动及退出)

本文详细介绍了GDB调试器的使用方法,包括如何启动GDB进行程序调试,退出GDB的多种方式,以及在调试过程中如何使用shell命令。通过GDB,你可以附加到运行中的进程,处理core文件,甚至控制进程的退出状态。此外,还提到了日志输出的管理和控制,使得调试过程更加高效和有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

启动GDB调试

gdb

在这里插入图片描述

退出GDB调试

quit
#或者
exit
#或者
Ctrl-d

注:部分centos版本可能不支持exit
在这里插入图片描述

启动GDB:如何启动GDB

 通过运行程序 gdb 调用 GDB。一旦启动,GDB 会从终端读取命令,直到您告诉它退出。
您还可以使用各种参数和选项运行 gdb,以在一开始就指定更多的调试环境。
此处描述的命令行选项旨在涵盖各种情况;在某些环境中,其中一些选项可能实际上不可用。
启动 GDB 最常用的方法是使用一个参数,指定一个可执行程序:

gdb program

在这里插入图片描述

当程序崩溃时,会产生core文件,所以还可以从指定的可执行程序和核心文件开始:

gdb program core

如:

gdb inphase.GBServer.out core.89101

相反,如果要调试正在运行的进程,您可以指定进程 ID 作为第二个参数或使用选项 -p:

gdb program 1234
#or
gdb -p 1234

在这里插入图片描述
在这里插入图片描述

会将 GDB 附加到进程 1234。使用选项 -p 您可以省略程序文件名。
利用第二个命令行参数需要一个相当完整的操作系统;当您将 GDB 用作连接到裸板的远程调试器时,可能没有任何“进程”的概念,并且通常无法获得核心转储。如果 GDB 无法附加或读取核心转储,它会警告您。
您可以选择让 gdb 使用 --args 将可执行文件之后的任何参数传递给下级。此选项停止选项处理。

gdb --args program  -O2 -c foo.c

在这里插入图片描述
这将导致 gdb 调试 program ,并将 program 的命令行参数(参见参数)设置为“-O2 -c foo.c”。
您可以通过指定 --silent(或 -q/–quiet)来运行 gdb,使他不打印前缀资料:

gdb --silent

看看区别:
在这里插入图片描述
您可以使用命令行选项进一步控制 GDB 的启动方式。 GDB 本身可以提醒您可用的选项。
类型

gdb -help

在这里插入图片描述
显示所有可用选项并简要描述它们的使用(可以简写为‘gdb -h’)。
您提供的所有选项和命令行参数都按顺序处理。使用“-x”选项时,顺序会有所不同。

退出GDB:如何退出GDB

quit [expression]
#or
exit [expression]
#or
q

要退出GDB,请使用quit命令(缩写为 q)、exit命令或键入文件结尾字符(通常为Ctrl-d)。如果不提供表达式, GDB将正常终止;否则它将使用表达式的结果作为错误代码终止。

中断(通常Ctrl-c)不会从​​ GDB退出,而是终止任何正在进行的GDB命令的操作并返回到GDB命令级别。任何时候键入中断字符都是安全的,因为GDB不允许它在安全的时候生效。

如果您一直在使用GDB来控制附加的进程或设备,则可以使用detach命令释放它(请参阅调试已运行的进程)。

shell命令行:如何在GDB中使用 shell 命令

如果您需要在调试会话期间执行偶尔的 shell 命令,则无需离开或暂停 GDB;你可以只使用shell命令。

shell command-string
#or
!command-string

在这里插入图片描述

调用标准 shell 来执行命令字符串。注意 ! 之间不需要空格。和命令字符串。在 GNU 和 Unix 系统上,环境变量 SHELL(如果存在)决定运行哪个 shell。否则 GDB 使用默认 shell(GNU 和 Unix 系统上的 /bin/sh,MS-Windows 上的 cmd.exe,MS-DOS 上的 COMMAND.COM 等)。

开发环境中经常需要使用make。您不必在 GDB 中为此目的使用 shell 命令:

make make-args

使用指定的参数执行 make 程序。这相当于“shell make make-args”。

pipe [command] | shell_command
| [command] | shell_command
pipe -d delim command delim shell_command
| -d delim command delim shell_command

执行命令并将其输出发送到 shell_command。请注意,| 周围不需要空格。如果没有提供命令,则重复执行的最后一个命令。
如果命令包含 |,选项 -d delim 可用于指定将命令与 shell_command 分开的备用分隔符字符串 delim。
例子:

(gdb) p var
$1 = {
  black = 144,
  red = 233,
  green = 377,
  blue = 610,
  white = 987
}
(gdb) pipe p var|wc
      7      19      80
(gdb) |p var|wc -l
7
(gdb) p /x var
$4 = {
  black = 0x90,
  red = 0xe9,
  green = 0x179,
  blue = 0x262,
  white = 0x3db
}
(gdb) ||grep red
  red => 0xe9,
(gdb) | -d ! echo this contains a | char\n ! sed -e 's/|/PIPE/'
this contains a PIPE char
(gdb) | -d xxx echo this contains a | char!\n xxx sed -e 's/|/PIPE/'
this contains a PIPE char!
(gdb)

日志输出

将GDB命令的输出保存到文件中。有几个命令可以控制GDB的日志记录。

set logging enabled [on|off]

启用或禁用日志记录。

set logging file file

更改当前日志文件的名称。默认日志文件是gdb.txt.

set logging overwrite [on|off]

默认情况下,GDB将追加到日志文件。overwrite如果要set logging enabled on改写日志文件, 请设置。

set logging redirect [on|off]

默认情况下,GDB输出将同时发送到终端和日志文件。redirect如果您希望输出仅发送到日志文件,请 设置。

set logging debugredirect [on|off]

默认情况下,GDB调试输出将同时发送到终端和日志文件。debugredirect如果您希望调试输出仅转到日志文件,请 设置。

show logging

显示日志记录设置的当前值。
您还可以将GDB命令的输出重定向到 shell 命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunkingYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值