用GDB 调试程序.pdf
《用GDB 调试程序.pdf》由会员分享,可在线阅读,更多相关《用GDB 调试程序.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12-3-13?GDB?1/ G D B 调试程序原著?R i c k Mc Mu l l i n用用 gdb 调试调试 GCC 程序程序 L i n u?包含一个叫 g d b 的 G N U 调试程序.g d b 是一个用来调试 C 和 C+程序的强调试器.它使你能在程序运行时观察程序的内部结构和内存的使用情况.以下是 g d b 所提供的一些功能:它使你能监视你程序中变的值.它使你能设置断点以使程序在指定的代码行上停止执行.它使你能一行行的执行你的代码.在命令行上键入 g d b 并按回车键就可以运行 g d b ,如果一切正常的话,g d b 将被启动并且你将在屏幕上看到类似的内容:G
2、 D B i s f r e e s o f t w a r e a n d y o u a r e w e l c o m e t o d i s t r i b u t e c o p i e s o f i tu n d e r c e r t a i n c o n d i t i o n s;t y p e s h o w c o p y i n g t o s e e t h e c o n d i t i o n s.T h e r e i s a b s o l u t e l y n o w a r r a n t y f o r G D B;t y p e s h o w
3、w a r r a n t y f o r d e t a i l s.G D B 4.1 4 (i 4 8 6-s l a k w a r e-l i n u x),C o p y r i g h t 1 9 9 5 F r e e S o f t w a r e F o u n d a t i o n,I n c.(g d b)当你启动 g d b 后,你能在命令行上指定很多的选项.你也可以以下面的方式来运行 g d b:g d b 当你用这种方式运行 g d b,你能直接指定想要调试的程序.这将告诉g d b 装入名为 f n a me 的可执行文件.你也可以用 g d b 去检查一个因
4、程序异常终止而产生的 c o r e 文件,或者与一个正在运行的程序相连.你可以参考 g d b 指南页或在命令行上键入 g d b -h 得到一个有关这些选项的说明的简单列表.为调试编译代码为调试编译代码(Compiling Code for Deb?gging)为使 g d b 正常工作,你必须使你的程序在编译时包含调试信息.调试信息包含你程序里的每个变的类型和在可执行文件里的地址映射以及源代码的行号.g d b 利用这些信息使源代码和机器码相关联.在编译时用-g 选项打开调试选项.gdb 基本命令基本命令 g d b 支持很多的命令使你能实现同的功能.这些命令从简单的文件装入到允许你检查
5、所调用的堆栈内容的复杂命令,表2 7.1 列出你在用 g d b 调试时会用到的一些命令.想解 g d b 的详细使用请参考 g d b 的指南页.表表 27.1.基本基本 gdb 命令命令.命?令描?述f i l e装入想要调试的可执行文件.k i l l终止正在调试的程序.l i s t列出产生执行文件的源代码的一部分.n e x t执行一行源代码但进入函数内部.s t e p执行一行源代码而且进入函数内部.r u n执行当前被调试的程序q u i t终止 g d b12-3-13?GDB?2/ a t c h使你能监视一个变的值而管它何时被改变.b r e a k在代码里设置断点,这将使
6、程序执行到这里时被挂起.m a k e使你能退出 g d b 就可以重新产生可执行文件.s h e l l使你能离开 g d b 就执行 U N I X s h e l l 命令.g d b 支持很多与 U N I X s h e l l 程序一样的命令编辑特征.你能象在 b a s h 或 t c s h里那样按 T a b 键让 g d b 帮你补齐一个唯一的命令,如果唯一的话 g d b 会列出所有匹配的命令.你也能用光标键上下翻动历史命令.gdb 应用举例应用举例 本节用一个实例教你一步步的用 g d b 调试程序.被调试的程序相当的简单,但它展示 g d b 的典型应用.下面列出将被
7、调试的程序.这个程序被称为 g r e e t i n g,它显示一个简单的问候,再用反序将它列出.#i n c l u d e m a i n ()c h a r m y _ s t r i n g =h e l l o t h e r e ;m y _ p r i n t (m y _ s t r i n g);m y _ p r i n t 2 (m y _ s t r i n g);?v o i d m y _ p r i n t (c h a r *s t r i n g)p r i n t f (T h e s t r i n g i s%s n ,s t r i n g);?v
8、o i d m y _ p r i n t 2 (c h a r *s t r i n g)c h a r *s t r i n g 2;i n t s i z e,i;s i z e =s t r l e n (s t r i n g);s t r i n g 2 =(c h a r *)m a l l o c (s i z e +1);f o r (i =0;i s i z e;i+)s t r i n g 2 s i z e -i =s t r i n g i ;s t r i n g 2 s i z e+1 =0 ;p r i n t f (T h e s t r i n g p r
9、i n t e d b a c k w a r d i s%s n ,s t r i n g 2);?用下面的命令编译它:12-3-13?GDB?3/ 用下面的命令编译它:g c c -o t e s t t e s t.c 这个程序执行时显示如下结果:T h e s t r i n g i s h e l l o t h e r eT h e s t r i n g p r i n t e d b a c k w a r d i s 输出的第一行是正确的,但第二行打印出的东西并是我们所期望的.我们所设想的输出应该是:T h e s t r i n g p r i n t e d b a c
10、k w a r d i s e r e h t o l l e h 由于某些原因,m y _ p r i n t 2 函数没有正常工作.让我们用 g d b 看看问题究竟出在哪儿,先键入如下命令:g d b g r e e t i n g注意注意:记得在编译 g r e e t i n g 程序时把调试选项打开.如果你在输入命令时忘把要调试的程序作为参数传给 g d b,你可以在 g d b 提示符下用 f i l e 命令来载入它:(g d b)f i l e g r e e t i n g 这个命令将载入 g r e e t i n g 可执行文件就象你在 g d b 命令行里装入它一样.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用GDB 调试程序 GDB 调试 程序
限制150内