linux学习之gdb调试工具篇

gdb

1.gdb介绍

本章介绍一种很强大的调试工具gdb,可以完全操控程序的运行,使得程序就像你手里的玩具一样,叫它走就走,叫它停就停,并且随时可以查看程序中所有的内部状态,比如各变量的值、传给函数的参数、当前执行的代码行等。

有了gdb以后,即使调试手段丰富了,调试的基本思想仍然是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环,根据现象如何假设错误原因,以及如何设计新的现象去验证假设,这都需要非常严密的分析和思考,如果因为手里有了强大的工具就滥用而忽略了分析过程,往往会治标不治本地修正Bug,导致一个错误现象消失了但Bug仍然存在,甚至是把程序越改越错

2.gdb的常用命令

  • help(h)———按模块列出命令类
  • help class——查看某一类型的具体命令
  • list(l)———查看代码,可跟行号和函数名
  • quit(q)———退出gdb
  • run(r)———-全速运行程序
  • start———–单步执行,运行程序,停在第一行执行语句
  • next(n)———逐过程执行
  • step(s)———逐语句执行,遇到函数,跳到函数内执行
  • backtrace(bt)–查看函数的调用的栈帧和层级关系
  • info(i)———查看GDB内部局部变量的数值,info breakpoints切换函数的栈帧。
  • finish———-结束当前函数,返回到函数调用点
  • set————-设置变量的值 set var n = 100
  • run argv[1] argv[2]–调试时命令行传参
  • print(p)——–打印变量和地址
  • break(b)——–设置断点,可根据行号和函数名
  • delete(d)——-删除断点d breakpoints NUM
  • display———设置观察变量
  • undisplay——-取消观察变量
  • continue(c)—–继续全速运行剩下的代码
  • enable breakpoints ——-启用断点
  • disable breakpoints——-禁用断点
  • x —————–查看内存 x /20xw 显示20个单元,16进制,4字节每单元
  • watch————被设置观察点的变量发生修改时,打印显示
  • i watch———-显示观察点
  • core文件———ulimit -c 1024 开启core文件,调试时gdb a.out core

3.gdb调试模式

  • run全速运行
  • start 单步调试
  • set follow—fork -mode child#Makefile项目管理。设置跟踪模式,跟踪父进程或子进程。
时间: 2024-11-10 13:30:03

linux学习之gdb调试工具篇的相关文章

linux学习之四---gdb调试

在Linux应用程序开发中,最常用的调试器是gdb. 一.启动和退出gdb gdb调试的对象是可执行文件,而不是程序的源代码.如果要使一个可执行文件可以被gdb调试,那么使用编译器gcc编译时需要加入-g选项,-g选项告诉gcc在编译时加入调试信息,这样gdb才可以调试这个被编译的程序. 1.编译test.c源程序 gcc -g test.c -o test ./test test.c中的源码为: #include<stdio.h> int get_sum(int n) { int sum=0

Linux学习: 使用gdb和gdbserver进行远程调试

1.引言 在日常程序开发中不免遇到类似空指针操作导致程序崩溃的问题,所以需要一定的手段去定位bug,而断点调试是普遍使用的技巧,比如Windows中用VC++的debug模式进单步运行.断点调试等,有很友好的图形化操作界面,而在Linux中使用的是没有图形界面的调试工具-GDB(听说eclipse支持GUI调试,暂未尝试),所以需要通过指令进行操作,下面逐步介绍gdb调试环境的搭建和使用方法. 2.gdb调试环境搭建 (1)下载gdb工具源码:http://www.gnu.org/softwar

Linux学习: 使用gdb和gdbserver进行调试

1.引言 在日常程序开发中不免遇到类似空指针操作导致程序崩溃的问题,所以需要一定的手段去定位bug,而断点调试是普遍使用的技巧,比如Windows中用VC++的debug模式进单步运行.断点调试等,有很友好的图形化操作界面,而在Linux中使用的是没有图形界面的调试工具-GDB(听说eclipse支持GUI调试,暂未尝试),所以需要通过指令进行操作,下面逐步介绍gdb调试环境的搭建和使用方法. 2.gdb调试环境搭建 (1)下载gdb工具源码:http://www.gnu.org/softwar

linux下的gdb调试工具

到目前为止我们的调试手段只有一种: 根据程序执行时的出错现象假设错误原因,然后在代码中适当的位置插入printf,执行程序并分析打印结果,如果结果和预期的一样,就基本上证明了自己假设的错误原因,就可以动手修正Bug了. 如果结果和预期的不一样,就根据结果做进一步的假设和分析. 这里,我们介绍一种很强大的调试工具gdb,可以完全操控程序的运行,使得程序就像你手里的玩具一样,叫它走就走,叫它停就停,并且随时可以查看程序中所有的内部状态,比如各变量的值.传给函数的参数.当前执行的代码行等. 有了gdb

linux学习笔记 第三篇

hostwww.baidu.com (查看百度的IP地址) 路由器的作用是:(NAT:network accesstansfrom)地址转换 gateway网关 1.   路由器主要功能是用来作NAT(dnat目的地地址转换snat原地址转换) eg :在没有设定网关之前,linux系统下的真机和虚拟机之间是不能够相互ping通的,因为它们不在一个网段内 2.网关 路由器上和自己处在同一个网段的那个ip 3.设定网关 systemctl stopNetworkManager  //先关闭服务才能

linux学习之shell基础篇

1.shell简介 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从shell或其他程序向Linux传递命令时,内核会做出相应的反应. 2.shell的工作原理 系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序.它的执行过程基本上按如下步骤: (1)读取用户由键盘输入的命令行. (2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形        式. (3)

linux学习笔记 第四篇

软件安装 软件名称的识别 rpm结尾的是用于 redhat操作系统 abrt-addon-ccpp-   软件的名字 2.1.11-19          软件版本号 e17                软件适用系统 x68_64             系统架构 关于linux软件的安装,举个例子,现在我们要在虚拟机里面安装"火狐"浏览器,怎么办呢? 首先,我们要在真机里面找到这个安装包 通过ssh服务将这个安装包发送给虚拟机 在虚拟机里的/mnt目录下就能找到这个安装包啦 然后点

linux学习:持续集成篇--svn版本管理系统的安装与使用-02

1.安装Apache  a.安装,并设置为开机启动     yum install httpd httpd-devel     service httpd start     chkconfig httpd on  b.将端口改为80     vi /etc/httpd/conf/httpd.conf           #ServerName www.example.com:80     ServerName localhost:80 c.访问http://192.168.175.9/ 2.安

linux学习笔记第五篇

自动安装系统 1.kick脚本 kick脚本是自动应答系统在安装工程中一切问题的脚本文件这个文件可以实现系统的自动安装在系统安装完毕后会在系统的root家目录中生成 anaconda-ks.cfg 这个文件就是以此系统模板生成的kickstart 2.kickstart脚本的制作 手动编写难度很大 系统中system-config-kickstart工具可以以图形方式制作kickstart 安装图形制作工具 yum insatll system-config-kickstart -y 安装完成后