gdb 调试示例
来源:互联网 发布:新能源科学与工程 知乎 编辑:程序博客网 时间:2024/05/11 22:28
1.gdb的简单使用
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。GDB主要完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
2.一个调试示例
——————源程序:tst.c
1#include<stdio.h>
2
3 intfunc(int n)
4 {
5 intsum=0,i;
6 for(i=0; i<n; i++)
7 {
8 sum+=i;
9 }
10 return sum;
11 }
12
13
14main()
15 {
16 int i;
17 long result= 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
21 }
22
23 printf("result[1-100] = %d \\n", result );
24 printf("result[1-250] = %d \\n", func(250) );
25 }
编译生成执行文件:(Linux下)
$test>cc -g tst.c -o tst
使用GDB调试:hchen/test>gdb tst <---------- 启动GDB
(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。
1 #include <stdio.h>
2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i<n; i++)
7 {
8 sum+=i;
9 }
10 return sum;
(gdb) <--------------------直接回车表示,重复上一次命令
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
(gdb)break 16 <--------------------设置断点,在源程序第16行处。
Breakpoint1 at 0x8048496: file tst.c, line 16.
(gdb)break func <--------------------设置断点,在函数func()入口处。
Breakpoint2 at 0x8048456: file tst.c, line 5.
(gdb)info break <--------------------查看断点信息。
NumType Disp Enb Address What
1 breakpoint keep y 0x08048496 in main at tst.c:16
2 breakpoint keep y 0x08048456 in func at tst.c:5
(gdb)r <---------------------运行程序,run命令简写
Startingprogram: /home/hchen/test/tst Breakpoint 1, main () at tst.c:17 <----------在断点处停住。
17 long result = 0;
(gdb)n <---------------------单条语句执行,next命令简写。
18 for(i=1; i<=100; i++)
(gdb)n
20 result += i;
(gdb)n
18 for(i=1; i<=100; i++)
(gdb)n
20 result += i;
(gdb)c <---------------------继续运行程序,continue命令简写。
Continuing.
result[1-100]= 5050 <----------程序输出。Breakpoint 2,func (n=250) at tst.c:5
5 int sum=0,i;
(gdb)n
6 for(i=1; i<=n; i++)
(gdb)p i <---------------------打印变量i的值,print命令简写。
$1= 134513808
(gdb)n
8 sum+=i;
(gdb)n
6 for(i=1; i<=n; i++)
(gdb)p sum
$2 = 1
(gdb)n
8 sum+=i;
(gdb) pi
$3 = 2
(gdb)n
6 for(i=1; i<=n; i++)
(gdb)p sum
$4 = 3
(gdb)bt <---------------------查看函数堆栈。
#0 func (n=250) at tst.c:5
#1 0x080484e4 in main () attst.c:24
#2 0x400409ed in __libc_start_main () from/lib/libc.so.6
(gdb)finish <---------------------退出函数。
Runtill exit from #0 func (n=250) at tst.c:5
0x080484e4in main () at tst.c:24
24 printf("result[1-250] = %d \n", func(250) );
Valuereturned is $6 = 31375
(gdb)c <---------------------继续运行。
Continuing.
result[1-250]= 31375 <----------程序输出。Program exitedwith code 027. <--------程序退出,调试结束。
(gdb)q <---------------------退出gdb。
hchen/test>
http://wenku.baidu.com/view/06901fc65fbfc77da269b185.html?from=related
http://wenku.baidu.com/view/9afdcb305a8102d276a22f9b.html
http://wenku.baidu.com/view/c27253c65fbfc77da269b19b.html
- gdb 调试示例
- gdb 调试示例
- gdb调试nginx示例
- gdb远程调试示例
- gdb多进程调试示例
- 嵌入式 GDB调试示例过程
- 嵌入式 GDB调试死锁示例
- linux gdb单步调试 示例
- gdb 调试openmp多线程程序 示例介绍
- GDB调试core dump文件示例
- Linux下使用GDB调试应用程序示例
- gdb 调试openmp多线程程序 示例介绍
- Linux下GDB调试简单示例
- GDB调试
- gdb 调试
- gdb调试
- gdb 调试
- GDB调试
- HDU 4832(DP+计数问题)
- Windows2008系统安全日志分析
- 介绍几个比较出名的编程ACM题库
- iOS属性的扩展
- 【VBA】VBA打开文件选择框、取得文件全路径与文件名
- gdb 调试示例
- 细数 N32926 SDK 不合理之处
- sqlserver2012 Microsoft SQL Server,错误: 5120
- OPNET14.5学习心得(二)
- S1--求100以内能整除13的最大整数
- va_start和va_end使用详解
- <IOS> 判断当前网络是否连接
- 关于机器人
- C语言:动态链表的建立,查找,删除,插入功能的实现