- 5
- 0
- 约2.54万字
- 约 34页
- 2016-09-18 发布于河南
- 举报
用GDB调试
GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。
用GDB调试程序
GDB概述————
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
一个调试示例——————
源程序:tst.c
1 #include 23 int func(int n)4 {5 int sum=0,i;6 for(i=0; i7 {8 sum+=i;9 }10 return sum;11 }121314 main()15 {16 int i;17 long result = 0;18 for(i=1; i=100; i++)19 {20 result += i;21 }2223 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 ---------- 启动GDBGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome 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 23 int func(int n)4 {5 int sum=0,i;6 for(i=0; i7 {8 sum+=i;9 }10 return sum;(gdb) -------------------- 直接回车表示,重复上一次命令11 }121314 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) inf
原创力文档

文档评论(0)