Linux下C语言的调式.doc
文本预览下载声明
Linux下C. 如何提高程序, 更好更快地定位程序中的, 是大家共同面. 可能Windows用:用VC :-) , 它提供了, 单步跟踪等的图形界面, 使. 但Linux用 O:-) : 难道我们Linux程序, 在代printf信息?难道Linux下就没有好的C?
当然不是了. GNU早就C语言编译器(Gcc)和(Gdb). Gdb虽然没有图形化的友好界面, 但是它VC工具相媲美, Linux程序. 下面通, 演示一下Gdb的使用流程:
示例文件 demo.c 的源代:
#include stdio.h
int sum(int, int);
????int
main()
{
????int result;
????int a = 1, b = 2;
????result = sum(a, b);
????printf(%d + %d = %d\n, a, b, result);
????return 0;
}
????int
sum(int a, int b)
{
????return a + b;
}
编译源文件, 生成可
$ gcc -g -Wall -o demo demo.c
虽然这段程序没有错误, 但Gdb的使用流程. 接下来就启Gdb进行调试.
注意:
Gdb, 而不是”.c”源文件, 因此, 需要先通Gcc编译生成可Gdb进行调试.
一定要加上”-g”, 这样编译出的可执行代码中才包含调试信息, 否Gdb无法.
不能使用 -O2, 因, 这样Gdb就无法找到使可, 也就不能.
(1) 启Gdb
$ gdb demo
GNU gdb (GDB) 7.0-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later /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 warranty for details.
This GDB was configured as x86_64-linux-gnu.
For bug reporting instructions, please see:
/software/gdb/bugs/...
Reading symbols from /home/wangsheng/tmp/demo/gdb/demo...done.
可以看出, 在Gdb的启动画面中指出了Gdb的版本号, 使用的, 接下来就”(gdb)”开头的命令行界面了.
(2)
在Gdb中”l”(list的)可以, 如下所示:
(gdb) l
1?????? #include
2
3?????? int sum(int, int);
4
5?????????? int
6?????? main()
7?????? {
8?????????? int result;
9?????????? int a = 1, b = 2;
10??????????result = sum(a, b);
(gdb) l
11??????????printf(%d + %d = %d\n, a, b, result);
12??????????return 0;
13??????}
14
15??????????int
16??????sum(int a, int b)
17??????{
18??????????return a + b;
19??????}
(gdb) l
Line number 20 out of range; demo.c has 19 lines.
可以看出, Gdb列出的源代码中明确地给出了对应的行号, 这样就可以大大地方便代码的定位.
(3) 设置断点
设置断点是调试程序中一个非常重要的手段, 它可以使程序到一定位置. 因此,可以在, 堆, 从而找出代.
在Gdb中, 只需在”b”后加入(这是最常用的方式). 如下所示:
(gdb) b 9
Breakpoint 2 at 0x4004f4: file demo.c, line 9.
注意: 9 行(第 8 行, 第 9 行未)
(4) 查看断点信息
(gdb) info b
Num???? Type?????????? Disp Enb Address????????????What
2?????? breakpoint???? keep
显示全部