GDB调试器及调试方法
发布日期:2021-11-03 09:33:19 浏览次数:3 分类:技术文章

本文共 2023 字,大约阅读时间需要 6 分钟。

GDB调试器及调试方法

一、GDB简介

• GDB : GNU Debugger,是GNU工程为GNU操作系统开发的

调试器,但它的使用不局限于GNU操作系统, GDB可以运行
在UNIX、Linux甚至Microsoft Windows。
• GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编
写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可
运行于不同电脑。
• 使用GDB我们可以:
– 设置断点使程序停住
– 监视或修改程序中变量的值
– 跟踪代码执行过程
gdb的使用
• 程序要能被调试,必须包含调试信息

二、gdb的使用

• 程序要能被调试,必须包含调试信息

• 编译程序时,通过gcc的-g选项为程序添加调试信息,例如:
gcc –g –o helloworld helloworld.c

1、启动gdb

• gdb [程序名]

在这里插入图片描述

2、gdb命令

• file 装入想要调试的可执行文件。• kill 终止正在调试的程序。• list 列出产生执行文件的源代码的一部分。• next 执行一行源代码但不进入函数内部。• step 执行一行源代码而且进入函数内部。• run 执行当前被调试的程序。• c 继续运行程序。• quit 终止gdb。• watch 使你能监视一个变量的值而不管它何时被改变。• backtrace 栈跟踪,查出代码被谁调用。• print 查看变量的值。• make 使你能不退出gdb就可以重新产生可执行文件。• shell 使你能不离开gdb就执行UNIX shell命令。• whatis 显示变量或函数类型。• break 在代码里设断点,这将使程序执行到这里时被挂起。• info break 显示当前断点清单,包括到达断点处的次数等。• info files 显示被调试文件的详细信息。• info func 显示所有的函数名称。• info local 显示当函数中的局部变量信息。• info prog 显示被调试程序的执行状态。• delete [n] 删除第n个断点。• disable[n] 关闭第n个断点。• enable[n] 开启第n个断点。• ptype 显示结构定义。• set variable 设置变量的值。• call name(args) 调用并执行名为name,参数为args的函数。• Finish 终止当前函数并输出返回值。• return value 停止当前函数并返回value给调用者。• break命令的使用– 根据行号设置断点:• (gdb) break linenum– 根据函数名设置断点:• (gdb) break funcname– 执行非当前源文件的某行或某函数时停止执行:• (gdb) break filename:linenum• (gdb) break filename:funcname– 根据条件停止程序执行:• (gdb) break linenum if expr• (gdb) break funcname if expr

3、gdb调试举例

• 下面的代码实现对一个整型数的反转功能,比如输入123,则

输出321。
• 但输入100时,程序的输出结果却不
在这里插入图片描述
1.c

#include 
void ShowRevertNum(int iNum){
while (iNum > 10) {
printf("%d", iNum % 10); iNum = iNum / 10; } printf("%d\n", iNum);}int main(void){
int iNum; printf("Please input a number :"); scanf("%d", &iNum); printf("After revert : "); ShowRevertNum(iNum);}

用l列出代码及行号:

在这里插入图片描述

4、内存出错的gdb调试

Linux中,程序崩溃时,一般会产生core文件,记录进程退出前

的状态,调试段错误问题,借助于该文件,可快速定位问题。
• 可按如下步骤生成和使用core文件
– Step 1: 让系统产生core文件
• ulimit –c num #设定core文件容量(num为数字,为0
是不产生core文件)
– Step 2: 运行程序,让程序崩溃,从而生成core文件
– Step 3: gdb配合core文件,定位问题
• gdb 程序名 core文件名
• 比如: gdb segDemo core

• 练习:利用core文件定位以下出错代码。

#include
int main(){
int *p=0; *p=1; return 0;}

在这里插入图片描述

使用gdb配合core文件定位问题
在这里插入图片描述
在这里插入图片描述

转载地址:https://blog.csdn.net/weixin_51118019/article/details/109370124 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ubuntu下opencv图像编程
下一篇:计算机网络实验

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月10日 07时27分22秒