预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

12-3-13GDB 用GDB调试程序 原著RickMcMullin 用gdb调试GCC程序 Linu包含了一个叫gdb的GNU调试程序.gdb是一个用来调试C和C++程序的强力调试器.它使你能在 程序运行时观察程序的内部结构和内存的使用情况.以下是gdb所提供的一些功能: 它使你能监视你程序中变量的值. 它使你能设置断点以使程序在指定的代码行上停止执行. 它使你能一行行的执行你的代码. 在命令行上键入gdb并按回车键就可以运行gdb了,如果一切正常的话,gdb将被启动并且你将在屏幕上看到 类似的内容: GDBisfreesoftwareandyouarewelcometodistributecopiesofit undercertainconditions;type"showcopying"toseetheconditions. ThereisabsolutelynowarrantyforGDB;type"showwarranty"fordetails. GDB4.14(i486-slakware-linux),Copyright1995FreeSoftwareFoundation,Inc. (gdb) 当你启动gdb后,你能在命令行上指定很多的选项.你也可以以下面的方式来运行gdb: gdb<fname> 当你用这种方式运行gdb,你能直接指定想要调试的程序.这将告诉gdb装入名为fname的可执行文件.你也可 以用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连.你可以参考gdb指南 页或在命令行上键入gdb-h得到一个有关这些选项的说明的简单列表. 为调试编译代码(CompilingCodeforDebgging) 为了使gdb正常工作,你必须使你的程序在编译时包含调试信息.调试信息包含你程序里的每个变量的类型和在 可执行文件里的地址映射以及源代码的行号.gdb利用这些信息使源代码和机器码相关联. 在编译时用-g选项打开调试选项. gdb基本命令 gdb支持很多的命令使你能实现不同的功能.这些命令从简单的文件装入到允许你检查所调用的堆栈内容的复 杂命令,表27.1列出了你在用gdb调试时会用到的一些命令.想了解gdb的详细使用请参考gdb的指南页. 表27.1.基本gdb命令. 命令描述 file装入想要调试的可执行文件. kill终止正在调试的程序. list列出产生执行文件的源代码的一部分. next执行一行源代码但不进入函数内部. step执行一行源代码而且进入函数内部. run执行当前被调试的程序 quit终止gdb oss.org.cn/ossdocs/gnu/linu/gdb.html1/6 12-3-13GDB watch使你能监视一个变量的值而不管它何时被改变. break在代码里设置断点,这将使程序执行到这里时被挂起. make使你能不退出gdb就可以重新产生可执行文件. shell使你能不离开gdb就执行UNIXshell命令. gdb支持很多与UNIXshell程序一样的命令编辑特征.你能象在bash或tcsh里那样按Tab键让gdb帮你补 齐一个唯一的命令,如果不唯一的话gdb会列出所有匹配的命令.你也能用光标键上下翻动历史命令. gdb应用举例 本节用一个实例教你一步步的用gdb调试程序.被调试的程序相当的简单,但它展示了gdb的典型应用. 下面列出了将被调试的程序.这个程序被称为greeting,它显示一个简单的问候,再用反序将它列出. #include<stdio.h> main() { charmy_string[]="hellothere"; my_print(my_string); my_print2(my_string); voidmy_print(char*string) { printf("Thestringis%s\n",string); voidmy_print2(char*string) { char*string2; intsize,i; size=strlen(string); string2=(char*)malloc(size+1); for(i=0;i<size;i++) string2[size-i]=string[i]; string2[size+1]=`\0'; printf("Thestringprintedbackwardis%s\n",string2); 用下面的命令编译它: oss.org.cn/ossdocs/gnu/linu/gdb.h