快速业务通道

Linux下编程工具的使用(5) - GDB调试工具(1)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-30
gdb) n
20 result = i;



(gdb) n
18 for(i=1; i<=100; i )



(gdb) n
20 result = i;



(gdb) c <--------------------- 继续运行程序, continue 命令简写.
Continuing.
result[1-100] = 5050 <---------- 程序输出.

Breakpoint 2, func (n=250) at tst.c:5
5 int sum=0,i;



(gdb) n
6 for(i=1; i<=n; i )



(gdb) p i <--------------------- 打印变量 i 的值, print 命令简写.
$1 = 134513808



(gdb) n
8 sum =i;



(gdb) n
6 for(i=1; i<=n; i )



(gdb) p sum
$2 = 1



(gdb) n
8 sum =i;



(gdb) p i
$3 = 2



(gdb) n
6 for(i=1; i<=n; i )



(gdb) p sum
$4 = 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/libc.so.6



(gdb) finish <--------------------- 退出函数.
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d n", func(250) );
Value returned is $6 = 31375



(gdb) c <--------------------- 继续运行.
Continuing.
result[1-250] = 31375 <---------- 程序输出.

Program exited with code 027. <-------- 程序退出,调试结束.



(gdb) q <--------------------- 退出 gdb .
使用GDB
一般来说 GDB 主要调试的是 C/C 的程序.要调试 C/C 的程序,在编译时,我们要把调试信息加到可执行文件中.使用编译器(g cc/gcc/g )的 -g 参数可以做到这一点.如:

> gcc -g hello.c -o hello
> g -g hello.cpp -o hello

如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址.当你用 -g 把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用 gdb 来调试他.

启动 GDB 的方法有以下几种:

1 、 gdb <program>
program 也就是你的执行文件,一般在当然目录下.

2 、 gdb <program> core
用 gdb 同时调试一个运行程序和 core 文件, core 是程序非法执行后 core dump 后产生的文件.

3 、 gdb <program> <PID>


如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID . gdb 会自动 attach 上去,并调试他. program 应该在 PATH 环境变量中搜索得到.


GDB 启动时,可以加上一些 GDB 的启动开关,详细的开关可以用 gdb -help 查看.我在下面只列举一些比较常用的参数:

-symbols <file>
-s <file>

从指定文件中读取符号表.


-se file
从指定文件中读取符号表信息,并把他用在可执行文件中.


-core <file>
-c <file>
调试时 core dump 的 core 文件.


-directory <directory>
-d <directory>
加入一个源文件的搜索路径.默认搜索路径是环境变量中 PATH 所定义的路径.
GDB 的命令
启动 gdb 后,就你被带入 gdb 的调试环境中,就可以使用 gdb 的命令开始调试程序了, gdb 的命令可以使用 help 命令来查看,如下所示:


$ gdb
GNU gdb 6.7.1-debian
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3 : GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show w

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号