嵌入式 GDB调试示例过程

原创 2013年12月02日 14:46:19
一个调试示例
——————
源程序:tst.c
 #include <stdio.h>
 int func(int n)
 {
 int sum=0,i;
 for(i=0; i<=n; i++)
 {
 sum+=i;
 }
 return sum;
 }
main()
{
 int i;
 long result = 0;
 for(i=1; i<=100; i++)
 {
 result += i;
 }
 
 printf("result[1-100] = %d \n",result);
 printf("result[1-250] = %d \n",func(250));
 }
编译生成执行文件:(Linux下)
hchen/test> gcc -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,andyou are
welcome to change it and/or distribute copies of it under certainconditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" fordetails.
This GDB was configured as "i386-suse-linux"...
(gdb) l <-------------------- l命令相当于list,从第一行开始列出原码。
 #include <stdio.h>
 int func(int n)
{
 int sum=0,i;
 for(i=0; i<=n; i++)
 {
 sum+=i;
 }
 return sum;
(gdb) <-------------------- 直接回车表示,重复上一次命令
 }
 main()
 {
 int i;
 long result = 0;
 for(i=1; i<=100; i++)
 {
 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 <---------- 在断点处停住。
 long result = 0;
(gdb) n <--------------------- 单条语句执行,next命令简写。
 for(i=1; i<=100; i++)
(gdb) n
 result += i;
(gdb) n
 for(i=1; i<=100; i++)
(gdb) n
 result += i;
(gdb) c <--------------------- 继续运行程序,continue命令简写。
Continuing.
result[1-100] = 5050 <----------程序输出。
Breakpoint 2,func (n=250) at tst.c:5
 int sum=0,i;
(gdb) n
 for(i=1; i<=n; i++)
(gdb) p i <--------------------- 打印变量i的值,print命令简写。
= 134513808
(gdb) n
 sum+=i;
(gdb) n
 for(i=1; i<=n; i++)
(gdb) p sum
= 1
(gdb) n
 sum+=i;
(gdb) p i
= 2
(gdb) n
 for(i=1; i<=n; i++)
(gdb) p sum
= 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
(gdb) finish <--------------------- 退出函数。
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
 printf("result[1-250] = %d \n",func(250));
Value returned is = 31375
(gdb) c <--------------------- 继续运行。
Continuing.
result[1-250] = 31375 <----------程序输出。
Program exited with code 027. <--------程序退出,调试结束。
(gdb) q <--------------------- 退出gdb。
hchen/test>
…………

相关文章推荐

嵌入式gdb调试环境建立

  • 2014年05月30日 08:42
  • 462KB
  • 下载

嵌入式gdb调试core

  • 2011年09月12日 20:04
  • 913B
  • 下载

嵌入式的gdb调试

在开发过程中有很多问题如果用gdb进行调试跟踪会大大提高效率,但是我发现不少同事对于gdb调试概念比较模糊,特别是跨平台的调试,以至于放弃用gdb调试而影响排除bug的效率。  因此我这里主要对跨平...

嵌入式 GDB调试精华以及实例

一:列文件清单  1. List  (gdb) list line1,line2  二:执行程序  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:46
  • 518

建立嵌入式gdb调试环境

一、下载gdb-*.tar.gz源代码 http://ftp.gnu.org/gnu/gdb/ 二、编译 GDB #tar zxvf gdb-*.tar.gz 2.1、编译GDB Server...

嵌入式 使用gdb调试段错误(segment fault)

我们打算使用gdb去解决为什么下面的程序(文件为segfault.c)引起了段错误的问题。下面的这段程序是从用户那里读入一行文本字串然后显示在屏幕上。然而,如下当前的程序并不会如期执行... ...

arm 嵌入式下的 gdb 远程调试

在编译之前,首先确定你已经安装了交叉编译环境 1.下载gdb-6.8.tar.gz     拷贝 到 /opt 目录下2. 解压到/opt目录下 #cd /opt #tar xzvf  gdb-6.8...

Eclipse+Gdb+嵌入式远程调试

第一步:安装arm-linux-gcc 这个网上很多,这里不再重复,本开发板一般都自带有该工具。 第二步:安装eclipse插件:Zylin Embedded CDT 进入help菜单 -> Sof...

嵌入式调试中gdb+gdbserver 调试环境搭建

1.  gdb + gdbserver交叉编译    下载GDB源码:    http://ftp.gnu.org/gnu/gdb/ 这里选择gdb-7.9.1.tar.gz tar -zxvf gd...
  • ostc184
  • ostc184
  • 2015年09月21日 16:04
  • 1620

Visual GDB的嵌入式ARM GCC工具链

  • 2015年07月29日 10:55
  • 53.11MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 GDB调试示例过程
举报原因:
原因补充:

(最多只允许输入30个字)