热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GDB命令行参数

http:www.programlife.netgdb-manual.htmlGDB命令行参数启动GDB:lgdbexecutablelgdb-eex


http://www.programlife.net/gdb-manual.html

GDB 命令行参数

启动 GDB:

l  gdb executable

l  gdb -e executable -c core-file

l  gdb executable -pid process-id

(使用命令 'ps -auxw' 可以查看进程的 pid)

选项

含义

–help
-h

列出命令行参数。

–exec=file
-e file

指定可执行文件。

–core=core-file
-c core-file

指明 core 文件。

–command=file
-x file

从指定文件中读取 gdb 命令。

–directory=directory
-d directory

把指定目录加入到源文件搜索路径中。

–cd=directory

以指定目录作为当前路径来运行 gdb 。

–nx
-n

不要执行 .gdbinit 文件中的命令。默认情况下,这个文件中的命令会在所有命令行参数处理完后被执行。

–batch

在非交互模式下运行 gdb 。从文件中读取命令,所以需要 -x 选项。

–symbols=file
-s file

从指定文件中读取符号表。

-write

允许对可执行文件和 core 文件进行写操作。

–quiet
-q

不要打印介绍和版权信息。

–tty=device

指定 device 为运行程序的标准输入输出。

–pid=process-id
-p process-id

指定要附属的进程 ID 。

 

GDB命令

GDB 中使用的命令:

命令

描述

help

列出 gdb 帮助信息。

help topic

列出相关话题中的 gdb 命令。

help command

列出命令描述信息。

apropos search-word

搜索相关的话题。

info args
i args

列出运行程序的命令行参数。

info breakpoints

列出断点。

info break

列出断点号。

info break breakpoint-number

列出指定断点的信息。

info watchpoints

列出观察点。

info registers

列出使用的寄存器。

info threads

列出当前的线程。

info set

列出可以设置的选项。

Break and Watch

 

break funtion
break line-number

在指定的函数,或者行号处设置断点。

break +offset
break -offset

在当前停留的地方前面或后面的几行处设置断点。

break file:func

在指定的file文件中的func处设置断点。

break file:nth

在指定的file文件中的第nth行设置断点。

break *address

在指定的地址处设置断点。一般在没有源代码时使用。

break line-number ifcondition

如果条件满足,在指定位置设置断点。

break line threadthread-number

在指定的线程中中断。使用info threads可以显示线程号。

tbreak

设置临时的断点。中断一次后断点会被删除。

watch condition

当条件满足时设置观察点。

clear
clear func
clear nth

清除函数func处的断点。
清除第nth行处的断点。

delete
d

删除所有的断点或观察点。

delete breakpoint-number
delete range

删除指定的断点,观察点。

disable breakpoint-number-or-range
enable breakpoint-number-or-range

不删除断点,仅仅把它设置为无效,或有效。
例子:
显示断点: info break
设置无效: disable 2-9

enable oncebreakpoint-number

设置指定断点有效,当到达断点时置为无效。

enable del breakpoint-number

设置指定断点有效,当到达断点时删除它。

finish

继续执行到函数结束。

Line Execution

 

step
s
step number-of-steps-to-perform

进入下一行代码的执行,会进入函数内部。

next
n
next number

执行下一行代码。但不会进入函数内部。

until
until line-number

until line-number ifcondition

继续运行直到到达指定行号,或者函数,地址等。

return
return expression

弹出选中的栈帧(stack frame)。如果后面指定参数,则返回表达式的值。

stepi
si
nexti
ni

执行下一条汇编/CPU指令。

info signals
info handle
handle SIGNAL-NAMEoption

当收到信号时执行下列动作:nostop(不要停止程序),stop(停止程序执行),print(显示信号),noprint(不显示),pass/noignore(允许程序处理信号),nopass/ignore(不让程序接受信号)

where

显示当前的行号和所处的函数。

Program Stack

 

backtrace
bt
bt inner-function-nesting-depth
bt -outer-function-nesting-depth

显示当前堆栈的追踪,当前所在的函数。

backtrace full

打印所有局部变量的值。

frame number
number

选择指定的栈帧。

up number
down number

向上或向下移动指定个数的栈帧。

info frame addr

描述选中的栈帧。

info args
info all-reg
info locals
info catch

显示选中栈帧的参数,局部变量,异常处理函数。all-reg也会列出浮点寄存器。

Source Code

 

list
l
list line-number
list function
list -
list start#,end#
list filename:function

列出相应的源代码。

set listsize count
show listsize

设置list命令打印源代码时的行数。

directory directory-name
dir directory-name
show directories

在源代码路径前添加指定的目录。

directory

当后面没有参数时,清除源代码目录。

Examine Variables

 

print variable
variable
file::variable
p 'file'::variable

打印指定变量的值。

p *array-var@length

打印arrary-var中的前length项。

p/x var

以十六进制打印整数变量var

p/d var

把变量var当作有符号整数打印。

p/u var

把变量var作为无符号整数打印。

p/o var

把变量var作为八进制数打印。

p/t var
x/b address
x/b &variable

以整数二进制的形式打印var变量的值。

p/c variable

当字符打印。

p/f variable

以浮点数格式打印变量var

p/a variable

打印十六进制形式的地址。

x/w address
x/4b &variable

打印指定的地址,以四字节一组的方式。

call expression

类似于print,但不打印 void 。

disassem addr

对指定地址中的指令进行反汇编。

Controlling GDB

 

set gdb-option value

设置 GDB 的选项。

set print array on
set print array off
show print array

以可读形式打印数组。默认是 off 。

set print array-indexes on
set print array-indexes off
show print array-indexes

打印数组元素的下标。默认是 off 。

set print pretty on
set print pretty off
show print pretty

格式化打印 C 结构体的输出。

set print union on
set print union off
show print union

打印 C 中的联合体。默认是 on 。

set print demangle on
set print demangle off
show print demangle

控制 C++ 中名字的打印。默认是 on 。

Working Files

 

info files
info share

列出当前的文件,共享库。

file file

file当作调试的程序。如果没指定参数,丢弃。

core file

file当作 core 文件。如果没指定参数,则丢弃。

exec file

file当作执行程序。如果没指定参数,则丢弃。

symbol file

file中读取符号表。如果没指定参数,则丢弃。

load file

动态链入file文件,并读取它的符号表。

path directory

把目录directory加入到搜索可执行文件和符号文件的路径中。

Start and Stop

 

run
r
run command-line-arguments
run < infile > outfile

从头开始执行程序,也允许进行重定向。

continue
c

继续执行直到下一个断点或观察点。

continue number

继续执行,但会忽略当前的断点number次。当断点在循环中时非常有用。

kill

停止程序执行。

quit
q

退出 GDB 调试器。

GDB 操作提示

l  在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。

l  不要使用编译器的优化选项,比如: "-O","-O2"。因为编译器会为了优化而改变程序流程,那样不利于调试。

l  在 GDB 中执行 shell 命令可以使用:shell command

l  GDB 命令可以使用 TAB 键来补全。按两次 TAB 键可以看到所有可能的匹配。

l  GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints。

GDB 在 Emacs 中的操作:

emacs 按键

动作

M-x gdb

切换到 gdb 模式。

C-h m

显示 gdb 模式介绍信息。

M-s

等同于gdb 中的 step 命令。

M-n

等同于gdb 中的 next 命令。

M-i

等同于gdb 中的 stepi 命令。

C-c C-f

等同于gdb 中的 finish 命令。

M-c

等同于gdb 中的 continue 命令。

M-u

等同于gdb 中的 up 命令。

M-d

等同于gdb 中的 down 命令。


推荐阅读
  • 进程(Process)是指计算机中程序对特定数据集的一次运行活动,是系统资源分配与调度的核心单元,构成了操作系统架构的基础。在早期以进程为中心的计算机体系结构中,进程被视为程序的执行实例,其状态和控制信息通过任务描述符(task_struct)进行管理和维护。本文将深入探讨进程的概念及其关键数据结构task_struct,解析其在操作系统中的作用和实现机制。 ... [详细]
  • 本文深入解析了计算机科学领域中常用的几种排序算法,包括冒泡排序、插入排序、选择排序和希尔排序。通过对这些算法的性能进行详细对比分析,探讨了它们在不同数据规模和分布情况下的优劣。研究结果表明,冒泡排序虽然实现简单,但在大多数情况下效率较低;插入排序在部分有序的数据集中表现较好;选择排序的时间复杂度较为稳定,但空间复杂度较高;而希尔排序通过引入增量序列显著提高了排序效率,适用于大规模数据集。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 深入学习 Python 中的 xlrd 模块:掌握 Excel 文件读取技巧
    本文深入探讨了 Python 中的 xlrd 模块,重点介绍了如何高效读取 Excel 文件(包括 xlsx 和 xls 格式)。同时,文章还详细讲解了 xlwt 模块在 Excel 文件写操作中的应用。此外,文中列举了常见单元格数据类型及其处理方法,为读者提供了全面的实践指导。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 题目:图像处理(HDU1828,计算周长并集,利用线段树与离散化技术进行扫描) ... [详细]
  • Java集合框架特性详解与开发实践笔记
    Java集合框架特性详解与开发实践笔记 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • Go语言中的高效排序与搜索算法解析
    在探讨Go语言中高效的排序与搜索算法时,本文深入分析了Go语言提供的内置排序功能及其优化策略。通过实例代码,详细讲解了如何利用Go语言的标准库实现快速、高效的排序和搜索操作,为开发者提供了实用的编程指导。 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
author-avatar
陈晏亚363951
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有