1) 今天安装了CentOS 5.5,顺便安装了GCC和G++,GDB:
n
Yum -y
install make //
安装
make
n
Yum -y install gcc //
安装
gcc
编译器
n
Yum -y install gcc-c++ //安装G++编译器
2) 编译调式实例:
(一) 在自己所建立的分区中:
1)mkdir helloworld //新建helloworld目录
2
)
cd
helloworld //
进入
helloworld
目录
3
)
vi
helloworld.c //
使用
vi
新建并打开
helloworld.c
文件
进入
vi,
Esc --->
i
进行编辑
:
-
#include <stdio.h>
-
int nGlobalVar = 0;
-
int tempFunction(int a, int b)
- {
-
printf("tempFunction is called, a = %d, b = %d \n", a, b);
-
return (a + b);
- }
-
int main()
- {
-
int n;
-
n = 1;
- n++;
- n--;
-
nGlobalVar += 100;
-
nGlobalVar -= 12;
-
printf("n = %d, nGlobalVar = %d \n", n, nGlobalVar);
-
n = tempFunction(1, 2);
-
printf("n = %d", n);
-
return 0;
- }
- //之后按下“Esc”,再保存退出“:wq”
(二)编译源文件:
gcc sample.c -o sample -g
-o 参数指定了编译生成的可执行文件名为 sample,参数 -g 表示将源代码信息编译到可执行文件中。
(三)调试:
1)敲入gdb
[root@localhost test]# gdb
GNU gdb (GDB) CentOS (7.0.1-42.el5.centos.1)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb)
2)(gdb) file sample
Reading symbols from /programingTest/test/sample...done.
(gdb)
3)输入
r,程序会正常执行,得到结果:
4)如果这样做,我们就不能调试了。于是我们需要设置断点。使用b命令来在main函数开头设置一个断点
breakpoints:
5) 再次
r命令
6) step和print命令
7)在
tempFunction
函数处设置断点:
8)继续运行c(continue):
9)如果我们进行汇编级调试,则需要用到display命令:
之
后程序每次中断都将显示下一条汇编指定(
si
命令用于执行一条汇编代码而
s
执行一行
C
代码):
注意按下enter键相当于继续执行上条指令!!!!!
删除断点d命令:
(gdb) d
Delete all breakpoints? (y or n) y
10)
使用命令
“b *main”
在
main
函数的
prolog
代码处设置断点(
prolog
、
epilog
,分别表示编译器在每个函数的开头和结尾自行插
入的代码):
11) 使用i r命令显示寄存器中的当前值—i r即Infomation Register
也可以显示任意一个指定的寄存器值:i r eax
最后,q退出gdb!!
最后总结一下常用gdb命令: