你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
C语言入门13
 

gdb 支持很多与 UNIX shell 程序一样的命令编辑特征. 你能象在 bash 或 tcsh里
那样按 Tab 键让 gdb 帮你补齐一个唯一的命令, 如果不唯一的话 gdb 会列出所有匹配
的命令. 你也能用光标键上下翻动历史命令.
gdb 应用举例
本节用一个实例教你一步步的用 gdb 调试程序. 被调试的程序相当的简单, 但它展
示了 gdb 的典型应用.

下面列出了将被调试的程序. 这个程序被称为 greeting , 它显示一个简单的问候,
再用反序将它列出.
#include

 

main ()

{

char my_string[] = "hello there";

 

my_print (my_string);

my_print2 (my_string);

}

 

void my_print (char *string)

{

printf ("The string is %s\n", string);

}

 

void my_print2 (char *string)

{

char *string2;

int size, i;


size = strlen (string);

string2 = (char *) malloc (size + 1);

for (i = 0; i < size; i++)

string2[size - i] = string;

string2[size+1] = `\0';

printf ("The string printed backward is %s\n", string2);

}
用下面的命令编译它:

gcc -o test test.c
这个程序执行时显示如下结果:
The string is hello there

The string printed backward is
输出的第一行是正确的, 但第二行打印出的东西并不是我们所期望的. 我们所
设想的输出应该是:
The string printed backward is ereht olleh
由于某些原因, my_print2 函数没有正常工作. 让我们用 gdb 看看问题究竟
出在哪儿, 先键入如下命令:

gdb greeting


注意: 记得在编译 greeting 程序时把调试选项打开.


如果你在输入命令时忘了把要调试的程序作为参数传给 gdb , 你可以在 gdb
提示符下用 file 命令来载入它:

(gdb) file greeting
这个命令将载入 greeting 可执行文件就象你在 gdb 命令行里装入它一样.
这时你能用 gdb 的 run 命令来运行 greeting 了. 当它在 gdb 里被运行后结果
大约会象这样:
(gdb) run

Starting program: /root/greeting

The string is hello there

The string printed backward is

Program exited with code 041
这个输出和在 gdb 外面运行的结果一样. 问题是, 为什么反序打印没有工作?
为了找出症结所在, 我们可以在 my_print2 函数的 for
语句后设一个断点, 具体的做法是在 gdb 提示符下键入 list 命令三次, 列出源代码:
(gdb) list

(gdb) list

(gdb) list


技巧: 在 gdb 提示符下按回车健将重复上一个命令.


第一次键入 list 命令的输出如下:

1 #include

2

3 main ()

4 {

5 char my_string[] = "hello there";

6

7 my_print (my_string);

8 my_print2 (my_string);

9 }

10
如果按下回车, gdb 将再执行一次 list 命令, 给出下列输出:

11 my_print (char *string)

12 {

13 printf ("The string is %s\n", string);

14 }

15

16 my_print2 (char *string)

17 {

18 char *string2;

19 int size, i;

20
再按一次回车将列出 greeting 程序的剩余部分:
21 size = strlen (string);

22 string2 = (char *) malloc (size + 1);

23 for (i = 0; i < size; i++)

24 string2[size - i] = string;

25 string2[size+1] = `\0';

(编辑:aniston)

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089