linux-gdb调试之一
来源:互联网 发布:2k 现有数据标准化 编辑:程序博客网 时间:2024/05/04 09:46
学习链接:
1、http://www.cnblogs.com/hankers/archive/2012/12/07/2806836.html
2、http://www.cnblogs.com/lidabo/p/4234362.html
gdb调试
1、gdb常用命令:
gdb
调试环境set var修改变量的值start开始执行程序,停在main
函数第一行语句前面等待命令step(或s)执行下一行语句,如果有函数调用则进入到函数中2、GDB 概述
GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具。
一般来说, GDB主要帮忙你完成下面四个方面的功能:
1 、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2 、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3 、当程序被停住时,可以检查此时你的程序中所发生的事。
4 、动态的改变你程序的执行环境。
3、示例程序
源程序: tst.c
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;
11 }
12
13
14 main()
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下)
hchen/test> cc -g tst.c -o tst
使用 GDB调试:
hchen/test> gdb tst <---------- 启动 GDB
GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux"...
(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行处。
Breakpoint 1 at 0x8048496: file tst.c, line 16.
(gdb) break func <-------------------- 设置断点,在函数 func()入口处。
Breakpoint 2 at 0x8048456: file tst.c, line 5.
(gdb) info break <-------------------- 查看断点信息。
Num Type 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命令简写
Starting program: /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) p i
$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 () at tst.c:24
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6
(gdb) finish <--------------------- 退出函数。
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d \n", func(250) );
Value returned is $6 = 31375
(gdb) c <--------------------- 继续运行。
Continuing.
result[1-250] = 31375 <---------- 程序输出。
Program exited with code 027. <-------- 程序退出,调试结束。
(gdb) q <--------------------- 退出 gdb。
hchen/test>
- linux-gdb调试之一
- linux gdb调试
- LINUX下GDB调试
- linux gdb 调试实例
- LINUX下GDB调试
- LINUX下GDB调试
- linux GDB 调试多线程
- linux-arm gdb调试
- linux GDB调试程序
- LINUX下GDB调试
- Linux Gdb调试初步
- gdb调试Linux内核
- gdb 调试 linux程序
- GDB--Linux调试工具
- LINUX下GDB调试
- linux下gdb调试
- linux GDB调试学习
- Linux下GDB调试
- 第五章-子类与继承-实验2(图形面积的和)
- [学习笔记]GameObject的Update和FixedUpdate区别
- ZooKeeper系列(一)基本概念
- nginx日志分割脚本
- 情绪分析 by LSTM网络
- linux-gdb调试之一
- Javascript中this关键字详解
- JNI学习之Invocation API
- struct2应用事例,完成学生信息的输入,提交显示输入的学生信息
- 编写代码过程中碰到的问题(不断更新中...)
- 第五周项目-计算员工的工资
- redis下高并发投票设计
- 经济危机与宏观经济学
- dataFrame selectExpr 使用示例