一 代码
#include<iostream>
using namespace std;
int func(int n){
int result=0;
for(int i=1;i<=n;i++){
result+=i;
}
return result;
}
int main(){
int arr[10];
arr[0]=0;
arr[1]=1;
for(int i=2;i<10;i++){
arr[i]=arr[i-1]+arr[i-2];
}
cout<<"arr[9]"<<arr[9]<<endl;
cout<<"func(9)"<<func(9)<<endl;
return 0;
}
二 编译运行
[root@localhost charpter05]# g++ -g -o test 0504.cpp
[root@localhost charpter05]# ./test
arr[9]34
func(9)45
三 gdb调试
1 输入gdb test命令,启动gdb
[root@localhost charpter05]# gdb test
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-100.el7_4.1
Copyright (C) 2013 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 "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/omc++/charpter05/test...done.
(gdb)
2 输入l,列出源码
(gdb) l
3 int func(int n){
4 int result=0;
5 for(int i=1;i<=n;i++){
6 result+=i;
7 }
8 return result;
9 }
10 int main(){
11 int arr[10];
12 arr[0]=0;
3 按下Enter,表示重复上一次命令
(gdb)
13 arr[1]=1;
14 for(int i=2;i<10;i++){
15 arr[i]=arr[i-1]+arr[i-2];
16 }
17 cout<<"arr[9]"<<arr[9]<<endl;
18 cout<<"func(9)"<<func(9)<<endl;
19 return 0;
20 }
4 执行 b 15,表示在源码15行处设置断点
(gdb) b 15
Breakpoint 1 at 0x40090b: file 0504.cpp, line 15.
5 执行 b func ,表示设置断点在函数func的入口处
(gdb) b func
Breakpoint 2 at 0x4008c4: file 0504.cpp, line 4.
6 执行info break,表示查看断点信息
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040090b in main() at 0504.cpp:15
2 breakpoint keep y 0x00000000004008c4 in func(int) at 0504.cpp:4
7 执行r命令,表示运行程序,run命令的简写
(gdb) r
Starting program: /root/omc++/charpter05/test
Breakpoint 1, main () at 0504.cpp:15
15 arr[i]=arr[i-1]+arr[i-2];
Missing separate debuginfos, use: debuginfo-install glibc-2.17-196.el7_4.2.x86_64 libgcc-4.8.5-16.el7_4.1.x86_64 libstdc++-4.8.5-16.el7_4.1.x86_64
程序停在断点处。
8 输入 n ,表示单条语句执行,next命令的简写
(gdb) n
14 for(int i=2;i<10;i++){
8 输入 p i 和 p arr[i] ,分别打印变量i 和变量 arr[i]的值。
(gdb) p i
$1 = 2
(gdb) p arr[i]
$2 = 1
9 输入 bt,查看函数堆栈
(gdb) bt
#0 func (n=9) at 0504.cpp:5
#1 0x000000000040096b in main () at 0504.cpp:18
10 输入finish ,退出函数
(gdb) finish
Run till exit from #0 func (n=9) at 0504.cpp:5
0x000000000040096b in main () at 0504.cpp:18
18 cout<<"func(9)"<<func(9)<<endl;
Value returned is $3 = 45
11 输入 q,结束调试
(gdb) q
A debugging session is active.
Inferior 1 [process 1095] will be killed.
Quit anyway? (y or n) y