用GDB调试程序
来源:互联网 发布:增值税发票数据导出 编辑:程序博客网 时间:2024/06/06 08:52
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
阅读全文
0 0
- 用GDB调试程序
- 用 GDB 调试程序
- 用 GDB 调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用 GDB 调试程序
- 用 GDB 调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- 用GDB调试程序
- Java中hashcode方法
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- Linux常用命令(一)
- 使用HBase Coprocessor协处理器
- 常用知识点
- 用GDB调试程序
- c++实验六
- Integer to Roman【LeetCode】
- verilog 新手导航
- java-一维二维数组的定义、使用二维数组、遍历数组
- 区块链搭建以及智能合约的运行
- POJ1149_PIGS_网络流
- 程序员所具备的素质[转]
- 你要工作多久,才能赚够一份早餐钱?