初学GDB(1)

The C Programming Language 1.5.1节中的程序copy.c为例:

#include <stdio.h>
main()
{
    int c;
    while ((c = getchar()) != EOF){
        putchar(c);
    }
}

用gcc进行编译gcc -g copy.c -o copy,-g表示生成调试信息。
然后就可以用gdb进行调试了gdb copy -q,-q用于忽略gdb的版本信息等。
输入命令l可以显示代码。
在第5行插入断点b 5
开始调试r
程序运行到第5行的断点出停止,此时加入观察变量c的命令watch c
单步调试n
此时可以输入一些字符,例如abc,然后回车,发现变量c的值发生了改变,变为了97,即a的ascii码。
继续运行至断点处c,可以看到c的值从97变为98,即b的ascii码。
输入命令c继续运行,看到c的值由98变为99,即c的ascii码。
输入命令c继续运行,看到c的值由99变为10,即换行符\n的ascii码。
输入kill终止程序。
命令info b可以看到所有的断点信息,delete删除断点。
最后用命令q退出gdb调试。

以上的完整版记录如下:

xxx@xxx-VirtualBox:~/test$ gdb copy -q
Reading symbols from copy...done.
(gdb) l
1	#include <stdio.h>
2	int main()
3	{
4		int c;
5		while ((c = getchar()) != EOF){
6			putchar(c);
7		}
8		return 0;
9	}
(gdb) b 5
Breakpoint 1 at 0x804845c: file 1-5-1-copy.c, line 5.
(gdb) r
Starting program: /home/ant/test/copy 

Breakpoint 1, main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) watch c
Hardware watchpoint 2: c
(gdb) n
abc

Hardware watchpoint 2: c

Old value = 134513841
New value = 97
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) c
Continuing.

Hardware watchpoint 2: c

Old value = 97
New value = 98
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) c
Continuing.

Hardware watchpoint 2: c

Old value = 98
New value = 99
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) c
Continuing.

Hardware watchpoint 2: c

Old value = 99
New value = 10
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x0804845c in main at 1-5-1-copy.c:5
	breakpoint already hit 1 time
(gdb) delete
Delete all breakpoints? (y or n) y
(gdb) q
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值