我是靠谱客的博主 迷路火车,最近开发中收集的这篇文章主要介绍C语言gdb调试详解一、gdb简介二、gdb的安装三、调试前的准备四、基本调试命令五、其他命令 ,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
一、gdb简介
二、gdb的安装
三、调试前的准备
四、基本调试命令
举个例子
五、其他命令
一、gdb简介
- GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具
- 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具
二、gdb的安装
CentOS系统中,用root用户登录服务器,执行以下命令安装或升级
yum -y install gdb
- 如果您的服务器没有安装gdb,以上命令就会安装最新版本的gdb,如果已经安装了gdb,就会更新到最新版本的gdb
- 安装gdb,前提条件是服务器必须接入互联网
三、调试前的准备
用gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加 -g 的参数
例如:
gcc -g -o 文件名 文件名.c
在命令提示符下输入gdb 加上你要调试的程序名就可以调试了
gdb 文件名
四、基本调试命令
命令 | 命令缩写 | 命令说明 |
set args |
| |
break | b |
|
run | r |
|
next | n |
|
step | s |
|
| p |
|
continue | c |
|
set var name=value |
| |
quit | q | 退出gdb环境 |
举个例子
#include <stdio.h>
#include <string.h>
int mystrcmp(const char *str1,const char *str2)
{
int i = 0;
int len = 0;// str1 和 str2 较短的字符串长度
if ( strlen(str1) > strlen(str2) ) len = strlen(str2);
else len = strlen(str1);
for (i = 0;i < len;i++) {
if (str1[i]==str2[i]) continue;
else break;
}
// 两个字符串相等
if ( (i==len) && (strlen(str1)==strlen(str2)) ) return 0;
// 两个字符串不相等
else if (str1[i]>str2[i]) return 1;
else return -1;
}
int main()
{
char name1[21];
memset(name1,0,sizeof(0));
strcpy(name1,",xiaoqiu");
char name2[21];
memset(name2,0,sizeof(0));
strcpy(name2,"hello");
printf("%dn",mystrcmp(name1,name2));
return 0;
}
调试以上程序
这里就进入到了 gdb 的调试界面了
list(简写 l): 查看源程序代码,默认显示10行,按回车键继续往下看10行
- break(简写 b) :格式 b 行号,在某行设置断点
- info breakpoints :显示断点信息
- Num: 断点编号
- Disp:断点执行一次之后是否有效 (keep:有效 dis:无效)
- Enb: 当前断点是否有效 (y:有效 n:无效)
- Address:内存地址
- What:位置
run (简写 r) :运行程序直到遇到结束或者遇到断点等待下一个命令
使用 b r n p s 命令
五、其他命令
除了基本命令外,gdb 还有一些其他命令
- continue 简写 c :继续执行,到下一个断点处(或运行结束)
- until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
- until+行号: 运行至某行,不仅仅用来跳出循环
- finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息
- call 函数(参数):调用程序中可见的函数,并传递“参数”
- delete 断点号n:删除第n个断点
- disable 断点号n:暂停第n个断点
- enable 断点号n:开启第n个断点
- clear 行号n:清除第n行的断点
- info b (info breakpoints) :显示当前程序的断点设置情况
- delete breakpoints:清除所有断点
- list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
- list 函数名:将显示“函数名”所在函数的源代码,如:list main
- display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
- watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
- whatis :查询变量或函数
- info function: 查询函数
- info locals: 显示当前堆栈页的所有变量
- where/bt :当前运行的堆栈列表;
- bt backtrace :显示当前调用堆栈
- up/down :改变堆栈显示的深度
- show args:查看设置好的参数
- info program: 来查看程序的是否在运行,进程号,被暂停的原因
- layout:用于分割窗口,可以一边查看代码,一边调试
- layout src:显示源代码窗口
- layout asm:显示反汇编窗口
- layout regs:显示源代码/反汇编和CPU寄存器窗口
- layout split:显示源代码和反汇编窗口
- Ctrl + L:刷新窗口
重点掌握基本命令就行,其他命令很多,可以自己去测试一下,了解一下即可,不用去死记硬背,看实际需求吧 ,命令这种东西用多了自然就熟悉了
最后
以上就是迷路火车为你收集整理的C语言gdb调试详解一、gdb简介二、gdb的安装三、调试前的准备四、基本调试命令五、其他命令 的全部内容,希望文章能够帮你解决C语言gdb调试详解一、gdb简介二、gdb的安装三、调试前的准备四、基本调试命令五、其他命令 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复