Linux 利用 GDB 举行调试的常用命令与技巧

打印 上一主题 下一主题

主题 1043|帖子 1043|积分 3129

GDB(GNU Debugger)是一个功能强盛的调试工具,可以资助开发者在程序运行过程中查找和修复题目。本文将介绍如何利用 GDB 调试程序,包括常用命令、调试 core 文件和正在运行的程序。
1. GDB 常用命令

在利用 GDB 调试程序时,把握一些常用命令非常紧张。以下是一些基础命令和用法:
1.1 安装 GDB

在 Linux 系统中,利用以下命令安装 GDB:
  1. yum -y install gdb
复制代码
大概在 Ubuntu 系统中利用:
  1. sudo apt-get install gdb
复制代码
1.2 启动 GDB

要启动 GDB 并调试一个程序,可以利用以下命令:
  1. gdb 目标程序
复制代码
比方,调试一个名为 my_program 的程序:
  1. gdb my_program
复制代码
1.3 设置程序的参数

在 GDB 中,你可以利用 set args 来为程序设置命令行参数。比方:
  1. set args 张三 西施 我是一只傻傻鸟
复制代码
这将模拟命令行参数传递给程序。假设程序的命令行参数利用 argc 和 argv 获取,执行程序时,它将利用这些参数。
1.4 设置断点

利用 break 或简称 b 命令设置断点。比方:
  1. break 20
复制代码
该命令会在程序的第 20 行设置一个断点。你也可以为函数名设置断点:
  1. break main
复制代码
1.5 启动程序并运行至断点

利用 run
或简称 r 来启动程序,程序会在设置的断点处停止:
  1. run
复制代码
如果程序没有碰到断点,它会直接运行至结束。
1.6 执行一步

利用 step
或简称 s 命令可以渐渐执行当前语句,并且进入函数内部:
  1. step
复制代码
如果你只是盼望跳过当前函数调用而不进入函数体,可以利用 next 或简称 n。
1.7 打印变量值

要查看变量的当前值,可以利用 print 或简称 p 命令:
  1. print variable_name
复制代码
比方,查看变量 i 的值:
  1. print i
复制代码
1.8 查看函数调用栈

利用 bt

(backtrace)命令查看当前的函数调用栈:
  1. bt
复制代码
2. GDB 调试 Core 文件

当程序崩溃时,系统大概会生成一个 core 文件,包罗了程序的内存快照和崩溃时的状态信息。利用 GDB 可以资助分析这些文件。
2.1 生成 Core 文件

在 Linux 中,可以通过 ulimit 命令设置生成 core 文件的最大大小:
  1. ulimit -c unlimited
复制代码
这将允许程序在崩溃时生成 core 文件。运行程序并发生崩溃后,可以利用以下命令:
  1. gdb 程序名 core 文件名
复制代码
比方,调试一个名为 my_program 的程序和它的 core 文件:
  1. gdb my_program
  2. core
复制代码
2.2 利用 GDB 调试 Core 文件

调试 core 文件时,起首可以利用 bt

命令查看函数调用栈,以便了解崩溃发生的位置:
  1. bt
复制代码
你还可以利用 print 命令查看崩溃时的变量值,以进一步分析题目所在。
3. GDB 调试正在运行的程序

GDB 也可以用于调试正在运行的程序。你可以附加到一个已经启动的进程,并及时调试它。

3.1 附加到正在运行的进程

利用 attach 命令将 GDB 附加到一个正在运行的进程。比方,如果进程 ID 为 1234:
  1. gdb
  2. (gdb) attach 1234
复制代码
这将使 GDB 附加到进程,接下来可以设置断点、查看变量等。
3.2 在进程中设置断点

在调试正在运行的程序时,你可以在进程中的特定位置设置断点。比方:
  1. (gdb) break main
复制代码
这会在程序的 main 函数处设置断点。
3.3 规复程序执行

利用 continue
或简称 c 命令,可以规复程序的执行,直到碰到下一个断点为止:
  1. continue
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表