gdb调试工具
Posted 清水寺扫地僧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试工具相关的知识,希望对你有一定的参考价值。
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;
GDB主要帮忙你完成下面四个方面的功能:
- 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
- 2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
- 3.当程序被停住时,可以检查此时你的程序中所发生的事。
- 4.动态的改变你程序的执行环境。
在进行程序调试时,要遵循“分析现象->假设错误原因->产生新的现象去验证假设”的循环。
进行gdb调试的前提是,程序是自己所写,同时在对程序进行编译时,要使用
−
g
-g
−g 选项(gcc简介及使用可见:gcc简介和命令行参数说明),例如:gcc -g main.c -o main
。若是对main使用gdb进行调试,则在shell中输入gdb main
即可。
(所生成的文件较不添加
−
g
-g
−g 的,多生成了调试表,可见文件大小比不添加的大。若是未添加且想使用 gdb 进行调试,则可打开后在 gdb 命令行中使用 file 文件名
即可,也可退出重新编译)
gdb工具常见调试指令
- l i s t list list: l i s t 1 list \\thickspace 1 list1,列出源码。列出指定行号 l l l 行附近的源代码;
- b b b: b r e a k , e . g . b 20 break,e.g. \\thickspace b 20 break,e.g.b20,在20行位置设置断点;
- r u n / r run / r run/r:运行程序;
- n / n e x t n/next n/next:下一条指令(会越过函数);
- s / s t e p s/step s/step:下一条指令(会进入函数);
- p / p r i n t p/print p/print: p i p \\thickspace i pi 查看变量 i i i 的当前值;
- c o n t i n u e continue continue:继续执行断点后续指令;
- q u i t quit quit:退出gdb当前调试;
其他指令:
- r u n run run:使用 r u n run run 查找段错误出现位置;
- f i n i s h finish finish:结束当前函数调用;
- s e t a r g s / r u n s t r 1 s t r 2 . . . set \\space args / run \\space str1 \\space str2 \\space ... set args/run str1 str2 ...:设置main函数命令行参数;
- i n f o b info \\space b info b:查看断点信息表;
- b 20 i f i = 5 b \\space 20 \\space if \\space i \\space = \\space 5 b 20 if i = 5:设置条件断点(使用条件表达式);
- p t y p e ptype ptype:查看变量类型;
- b t bt bt:列出当前程序正存活着的栈帧,常和ptype配合使用;
- f r a m e − i frame \\space -i frame −i:根据栈帧标号,切换栈帧;
- d i s p l a y display display:设置跟踪变量,并显示跟踪变量的标号;
- u n d i s p l a y undisplay undisplay:取消设置跟踪变量,使用跟踪变量的标号;
栈帧概念拓展:随着函数调用而在stack上开辟的一片内存空间,用于存放函数调用时产生的局部变量和临时值(栈帧切换时所使用的标号),也即一个函数调用时,函数调用所产生的调用栈
较全指令列表
更加全面的内容详见:Linux环境下的GDB调试方法
以上是关于gdb调试工具的主要内容,如果未能解决你的问题,请参考以下文章