首先用一个简单的打印字符的程序来做下示例

#include<stdio.h>
#include<string.h>
void main()
{
    int i=0;
    char a[4]="abc";
    for(i=0;i<strlen(a);i++)
    {
        printf("%c",a[i]);
    }
}

要想用gdb调试文件,有两种方法 1 gcc生成可执行的文件, gdb 直接调试文件2 直接进入gdb 然后输入file 可执行文件

方法一:

root@zhf-linux:/home/zhf/zhf/c_prj# gcc -g -o test1 test1.c

root@zhf-linux:/home/zhf/zhf/c_prj# gdb test1

GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1

Copyright (C) 2016 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 "i686-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from test1...(no debugging symbols found)...done.

(gdb) run

Starting program: /home/zhf/zhf/c_prj/test1

abc[Inferior 1 (process 3802) exited normally]

方法二:

root@zhf-linux:/home/zhf/zhf/c_prj#
gdb

GNU
gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1

Copyright
(C) 2016 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 "i686-linux-gnu".

Type
"show configuration" for configuration details.

For
bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find
the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For
help, type "help".

Type
"apropos word" to search for commands related to "word".

(gdb)
file test1

Reading
symbols from test1...(no debugging symbols found)...done.

(gdb)
run

Starting
program: /home/zhf/zhf/c_prj/test1

abc[Inferior
1 (process 3818) exited normally]

进入gdb后,我们来看下有哪些功能可供调试。在程序调试中,断点是必不可少的。我们先来看下如何设置断点。break命令就是用来设置断点用的。

Break
行号 运行到某行停止

break
函数名称 运行到某个函数停止运行

break
行号/函数名称
if
条件

上面的程序中我们在第7行也就是for循环的地方做一个断点。disable
断点号可以停止断点。比如disable
1就是停止掉第一个断点

(gdb)
break 7

Breakpoint
1 at 0x80484b7: file test1.c, line 7.

然后执行run,程序执行到第7行的时候停止

(gdb)
run

Starting
program: /home/zhf/zhf/c_prj/test1

Breakpoint
1, main () at test1.c:7

7 char
a[4]="abc";

进入断点后我们可以通过print命令来打印具体的变量,来查看变量的值。其中$1代表的是第几次使用print命令。

(gdb)
print i

$1
= 0

(gdb)
print a[0]

$2
= 97 'a'

要在断点处继续执行需要执行next命令,与此同时我们还可以设置display
变量来查看每次运行后变量的

(gdb)
display i

1:
i = 0

(gdb)
next

9 printf("%c",a[i]);

1:
i = 0

(gdb)
next

7 for(i=0;i<strlen(a);i++)

1:
i = 0

(gdb)
next

9 printf("%c",a[i]);

1:
i = 1

(gdb)
next

7 for(i=0;i<strlen(a);i++)

1:
i = 1

(gdb)
next

9 printf("%c",a[i]);

1:
i = 2

如果不想单步的执行,可以运行continue命令运行到第二个断点处停止,如果没有第二个断点,则直接运行到程序结尾

通过whatis
变量名可以查看变量或者函数的类型:

(gdb)
whatis i

type
= int

在运行的时候还可以实时的改变变量的值来控制程序或者循环

(gdb)
set var i=0

(gdb)
print i

$7
= 0

另外还可以设置观察窗口,当变量发生变化的时候,程序立即停止,并显示变化的值。命令是watch

这里设置当i>0的时候停止,并显示出old
value和new
value

(gdb)
watch i>0

Hardware
watchpoint 5: i>0

(gdb)
continue

Continuing.

Hardware
watchpoint 3: i

Old
value = 0

New
value = 1

Hardware
watchpoint 5: i>0

Old
value = 0

New
value = 1

0x080484ec
in main () at test1.c:7

7 for(i=0;i<strlen(a);i++)

另外还有rwatch:当表达式值被读取的时候,就停止程序。awatch:用于当表达式的值被读或被写的时候,停止程序

在运行过程中还可以实时的查看源代码。采用list命令。

(gdb)
list

4 {

5 int
i=0;

6 char
a[4]="abc";

7 for(i=0;i<strlen(a);i++)

8 {

9 printf("%c",a[i]);

10 }

11 }

(gdb)
list 4,6

4 {

5 int
i=0;

6 char
a[4]="abc";

list
<function> 列出某个函数的代码

list
<first,last>列出first到last行的代码

list
<,last>列出当前行到last行的代码

list
<filename,n> 列出文件的第n行代码

list
<filename,function>列出文件名函数名为function的代码

linux c编程:gdb的使用的更多相关文章

  1. linux C编程 gdb的使用

    linux C编程 gdb的使用 通常来说,gdb是linux在安装时自带的,在命令行键入"gdb"字符并按回车键会启动gdb调试环境. 1.gdb的基本命令 命令 说明 file ...

  2. gdb笔记 ---《Linux.C编程一站式学习》

    gdb笔记 ---<Linux.C编程一站式学习> 单步执行和跟踪函数调用 函数调试实例 #include <stdio.h> int add_range(int low, i ...

  3. Linux环境编程相关的文章

    Linux环境编程相关的文章 好几年没有接触Linux环境下编程了,好多东西都有点生疏了.趁着现在有空打算把相关的一些技能重拾一下,顺手写一些相关的文章加深印象. 因为不是写书,也受到许多外部因素限制 ...

  4. Linux C编程之一:Linux下c语言的开发环境

    ---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去... 1.开发环境的构成 编辑器:VI: 编译器:选择GNU  C/C++编译器gcc: 调试器: ...

  5. Linux多任务编程之七:Linux守护进程及其基础实验(转)

    来源:CSDN  作者:王文松  转自Linux公社 ------------------------------------------------------------------------- ...

  6. Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号

    Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...

  7. [Linux] Linux C编程一站式学习 Part.3

    Linux系统编程 文件与I/O C标准I/O库函数与Unbuffered I/O函数 C标准I/O库函数printf().putchar().fputs(),会在用户空间开辟I/O缓冲区 系统函数o ...

  8. 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"

    [深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...

  9. 【linux草鞋应用编程系列】_5_ Linux网络编程

    一.网络通信简介   第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章.   二.linux网络通信     在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...

  10. 学习linux/unix编程方法的建议(转)

    假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux ...

随机推荐

  1. 以root用户身份在jenkins中运行shell命令

    以下过程是CentOS 1.打开此脚本(使用VIM或其他编辑器): vim /etc/sysconfig/jenkins 2.找到$JENKINS_USER并更改为“root”: $JENKINS_U ...

  2. 使用charles远程调试iOS移动应用

    做iOS移动应用很多开发者会喜欢抓网络发包.回包来联调服务端借口以及定位其他网络问 题.如果在Windows系统可以使用fiddler来做iOS的远程代理,只要fiddler所在系统与iOS设备同时连 ...

  3. selinue引起的ssh连接错误

    在客户端执行ssh依然报错: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 在这个页面不小心看到了原因: http://ser ...

  4. python list删除数据 和复制 列表

    复制列表的方法: lst = [1,2,3] lst1 = lst[:] # one way lst2 = list(lst) # another 删除数据的正确方法: num_list = [1, ...

  5. 用CHttpFile实现简单的GET/POST数据【转】

    一.GET 数据,下载网页,文件等,用于可下载的文件,不能用于服务端运行的程序,比如.aspx文件等,否则会返回500错误. CString strSentence, strWriteName=&qu ...

  6. Jenkins安装war版本

    Jenkins的war包安装很简单: 下载jenkins的war包地址:https://jenkins.io/download/ 选择对应的版本 然后放入tomcat启动就好,其他根据提示来就好,比较 ...

  7. falsh,.swf文件修改z-index

    <object style="z-index:-1;"> <param name="wmode" value="transparen ...

  8. MySQL之慢查询-删除慢查询日志

    一.环境 OS:CentOS release 5.8(64位) DB:MySQL5.5.17 二.操作         直接通过命令 rm -f  删除了慢查询日志 三.出现故障 慢查询日志没有自己主 ...

  9. 中兴应用之星携手天翼开放平台:让APP开发更简单

    日前,业内率先的APP开发平台运营商中兴应用之星与中国电信天翼开放平台达成战略合作.即广大用户通过天翼开放平台,可直接享受到应用之星提供的"APP开发服务".   应用之星.中兴通 ...

  10. uva 11885 - Number of Battlefields(矩阵高速幂)

    题目连接:uva 11885 - Number of Battlefields 题目大意:给出周长p,问多少种形状的周长为p的,而且该图形的最小包围矩阵的周长也是p,不包含矩形. 解题思路:矩阵高速幂 ...