习惯了vs调试,在linux上还没调试过今天初次尝试了gdb
1、生成带调试信息的编译文件;
$ gcc client2.c -g -o client2.o
2、进入调试:
$gdb client2.o 输出:
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 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 warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/ctest/client2.o...done.
(gdb)
3、设置断点:
(gdb) break 21
4、运行程序:
(gdb) run
Breakpoint 4, main () at client2.c:21
21 len = sizeof(address);
5、打印断点时的变量信息:
(gdb) print address
$4 = {sin_family = 2, sin_port = 1234, sin_addr = {s_addr = 16777343},
sin_zero = " \006@\000\000\000\000"}
6、继续程序运行:
(gdb) cont
Continuing.
char from server = B
Program exited normally.
7、列出程序源代码:(list)打印围绕当前位置前后的一段代码
(gdb) list
16 sockfd = socket(AF_INET,SOCK_STREAM,0);
17
18 address.sin_family = AF_INET;
19 address.sin_addr.s_addr = inet_addr("127.0.0.1");
20 address.sin_port = 1234;
21 len = sizeof(address);
22
23 result = connect(sockfd,(struct sockaddr *)&address,len);
24 if(result==-1)
25 {perror("oops:client1");
(gdb) list
26 exit(1);
27 }
28
29 write(sockfd,&ch,1);
30 read(sockfd,&ch,1);
31 printf("char from server = %c\n",ch);
32 close(sockfd);
33 exit(0);
34 }
(2)
1、查看断点信息:
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040070c in main at client2.c:10
breakpoint already hit 1 time
2 breakpoint keep y 0x000000000040070c in main at client2.c:11
breakpoint already hit 1 time
3 breakpoint keep y 0x000000000040073a in main at client2.c:20
breakpoint already hit 1 time
4 breakpoint keep y 0x0000000000400740 in main at client2.c:21
breakpoint already hit 1 time
2、使断点无效:其中1为第一个断点
(gdb) disable break 1
3、使断点有效:
(gdb) enable break 1
4、commands命令:在断点时做一些工作
(gdb) commands 3
Type commands for breakpoint(s) 3, one per line.
End with a line saying just "end".
>print "haha"
Breakpoint 3, main () at client2.c:20
20 address.sin_port = 1234;
$5 = "haha"