debugging with gdb

preview
需积分: 0 4 下载量 131 浏览量 更新于2017-04-12 1 收藏 2.58MB PDF 举报
### GDB调试技巧详解 #### 概述 GDB(GNU Debugger)是GNU项目下的一个源码级调试器,广泛应用于Linux系统中的程序调试。它能够帮助开发者在开发过程中找到并修正程序错误,提高软件质量。本文档为GDB调试指南的第十版,适用于GDB版本7.12.50.20170324-git,由Richard Stallman、Roland Pesch、Stan Shebs等多位作者共同编写。 #### 目录概述 文档分为多个章节,包括但不限于: - **第1章**:简要介绍GDB的基本功能。 - **第2章**:讲解如何启动和退出GDB,以及如何在GDB内部执行shell命令和记录输出。 - **第3章**:详细介绍GDB命令的语法和使用方法,包括命令补全和获取帮助等功能。 - **第4章**:重点讲述如何在GDB中运行程序,包括编译选项、环境设置、输入输出管理等内容。 - **第5章**:深入探讨如何在程序运行时设置断点、观察点和捕捉点,以及如何删除这些断点。 #### 第1章:GDB简介 GDB是一款功能强大的调试工具,支持多种编程语言,如C、C++、Ada等。通过GDB,开发者可以实现以下操作: - **查看和修改内存内容** - **设置断点** - **单步执行代码** - **跟踪调用栈** #### 第2章:启动与退出GDB - **2.1 启动GDB** - **选择文件**:可以通过指定文件路径来启动GDB,例如`gdb myprogram`。 - **选择模式**:GDB支持多种调试模式,包括图形界面模式和文本界面模式。 - **启动过程**:GDB启动后会自动加载指定的可执行文件,并进入调试准备状态。 - **2.2 退出GDB** - 使用`quit`或`q`命令退出GDB。 #### 第3章:GDB命令详解 - **3.1 命令语法** - GDB命令通常以动词开头,后跟参数。 - **3.2 命令补全** - GDB支持命令行补全功能,用户可以通过按Tab键来完成命令补全。 - **3.3 获取帮助** - 输入`help`命令可以获取GDB的帮助信息;输入`help <command>`可以获取特定命令的帮助信息。 #### 第4章:运行程序 - **4.1 编译选项** - 为了使GDB能够有效调试程序,编译时应添加-g选项,以便保留调试信息。 - **4.2 启动程序** - 在GDB中使用`run`命令来启动程序,可以指定参数传递给被调试的程序。 - **4.3 程序参数** - 可以通过`run arg1 arg2`方式向程序传递参数。 - **4.4 环境变量** - 使用`set environment VAR=value`命令来设置环境变量。 - **4.5 工作目录** - 通过`cd`命令更改工作目录。 - **4.6 输入输出** - 可以通过重定向文件来控制程序的输入输出。 - **4.7 调试已运行进程** - 使用`attach pid`命令附着到一个已经运行的进程上进行调试。 - **4.8 终止子进程** - 通过`kill`命令终止正在调试的子进程。 - **4.9 多进程调试** - 支持同时调试多个进程。 - **4.10 多线程调试** - 通过`info threads`命令查看当前线程列表,使用`thread`命令切换线程。 - **4.11 调试fork** - 支持跟踪进程创建。 - **4.12 设置书签** - 可以设置书签以便稍后返回。 #### 第5章:停止与继续 - **5.1 断点、观察点和捕捉点** - **设置断点**:使用`break`命令设置断点。 - `break filename:line_number`在指定文件的某一行设置断点。 - `break function_name`在函数入口处设置断点。 - **设置观察点**:使用`watch`命令设置观察点,当某个变量发生变化时会触发中断。 - **设置捕捉点**:使用`catch`命令设置捕捉点,用于捕捉某些事件的发生,如异常抛出。 - **删除断点**:使用`delete`命令删除断点,可以指定断点编号。 以上内容仅为GDB调试手册的部分摘录,更多详细内容和高级用法,请参阅完整的文档。对于初学者来说,熟悉这些基本操作将极大提升程序调试的效率。