用GDB 调试程序.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:6 大小:198KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

用GDB 调试程序.pdf

用GDB调试程序.pdf

预览

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

15 金币

下载此文档

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

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

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

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

12-3-13GDB用GDB调试程序原著RickMcMullin用gdb调试GCC程序Linu包含了一个叫gdb的GNU调试程序.gdb是一个用来调试C和C++程序的强力调试器.它使你能在程序运行时观察程序的内部结构和内存的使用情况.以下是gdb所提供的一些功能:它使你能监视你程序中变量的值.它使你能设置断点以使程序在指定的代码行上停止执行.它使你能一行行的执行你的代码.在命令行上键入gdb并按回车键就可以运行gdb了,如果一切正常的话,gdb将被启动并且你将在屏幕上看到类似的内容:GDBisfreesoftwareandyouarewelcometodistributecopiesofitundercertainconditions;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终止gdboss.org.cn/ossdocs/gnu/linu/gdb.html1/612-3-13GDBwatch使你能监视一个变量的值而不管它何时被改变.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