用GDB调试程序

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。一般来说,GDB主要有下面四个方面的功能:

    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
    2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
    3、当程序被停住时,可以检查此时你的程序中所发生的事。
    4、动态的改变你程序的执行环境。

以冒泡排序为例加以说明。

源码:

#include <iostream>
#include <stdlib.h>     //为了使用rand()函数

using namespace std;

void bubblesort(int*, int);    //函数声明,通过传指针调用函数
void bubblesortbyarray(int[], int);   //函数生命,通过传数组调用函数

int main(){
	
	int array[10];
	for(int i = 0; i < 10; i++){
		array[i] = rand()%100;      //表示对100取余数,生成0-99的随机数
		cout << "array[" << i << "]:" << '\t' << array[i] << endl;
	}
	bubblesortbyarray(array, 10);   //传数组时一般同时传入数组元素的个数
	//int *pointer = array;
	//bubblesort(pointer, 10);
	cout << "after sort:" << endl;
	for(int i = 0; i < 10; i++){
		cout << "array[" << i << "]:" << '\t' << array[i] << endl;
	}
	
}

/*void bubblesort(int *pointer, int size){
	
	for(int i = 0; i < size - 1; i++){
		for(int j = 0; j < size - 1 - i; j++){
			int temp = *(pointer+j);
			if (temp > *(pointer+j+1)){
				*(pointer+j) = *(pointer+j+1);
				*(pointer+j+1) = temp;
			}
		}
	}
	
}*/

void bubblesortbyarray(int array[], int size){
	
	for(int i = 0; i < size - 1; i++){
		for(int j = 0; j < size - 1 - i; j++){
			int temp = array[j];
			if (temp < array[j+1]){
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}
	}
	
}


编译:

g++ -g -o bubblesort bubblesort.cpp      //可以写makefile,但是必须要有 -g     必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。

使用gdb调试:

gdb bubblesort     //启动gdb


列出源码:

(gdb) l      //l命令相当于list,显示一部分代码,按回车可以继续显示其余的部分

设置断点执行:

(gdb) break 13     //在源程序的第13行设置断点
(gdb) break bubblesortbyarray    //在bubblesortbyarray函数位置设置断点


显示断点信息:

(gdb) info break

运行程序:

(gdb) r      //运行程序,run命令简写   在断点处会停住

单条指令执行:

(gdb) n      //单条语句执行,next命令简写。


在断点处继续执行:

(gdb) c      //继续运行程序,continue命令简写

显示代码和断点效果:

(gdb) ref

打印变量的值:

(gdb) p array[2]     //p相当于print

退出gdb

(gdb) q   //quit




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值