linux c:gdb的使用

p { margin-bottom: 0.25cm; line-height: 120% }

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

#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 可执行文件

p { margin-bottom: 0.25cm; line-height: 120% }

方法一:

[email protected]:/home/zhf/zhf/c_prj# gcc -g -o test1 test1.c

[email protected]:/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]

方法二:

[email protected]:/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的代码

时间: 2024-11-05 18:24:43

linux c:gdb的使用的相关文章

Linux知识(5)----LINUX下GDB调试

参考资料: 1.LINUX下GDB调试

linux中gdb的可视化调试

今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成的可执行文件,用gdb -tui -q p2psrv(要debug的命令),就可以进入一个类似的可视化的调试界面. 之后相信一些基本的gdb操作大家都应该清楚. backtrace:查看各级函数调用及参数 finish:连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 :选

Linux 下GDB的使用之简单入门

Linux 下程序崩溃.先要生成Core文件方可调试(这里Test为被调试程序) 1.查看Core文件(相当于Windows下的dump)大小,如果为0,则不会生成core文件 ulimit -c 查看core文件大小 ulimit -c filesize 设置大小为filesize ulimit -c unlimited 设置core大小为无限制 2.启动被调试程序 进入到被调试程序目录,输入gdb ./Test  回车 如果被调试程序有参数需设置,则 set args xxxx 回车 3.设

使用linux的GDB打印STL(vector,map,set..................)

在linux用gdb或者cgdb计较不爽的地方是无法打印STL的东西,所有啊去网上找了找解决方案https://www.douban.com/note/182826844/?qq-pf-to=pcqq.c2c 本帖把怎么配置这个东西写出了,万一以后忘了,可以回头找找. 首先是下载gdb文件 https://sourceware.org/gdb/wiki/STLSupport    ------>找到网页里面的  然后点击进去下载stl_views_1.0.3.gdb 接下来把这个东西当到linu

Linux下gdb调试

关于gdb的其他客套话不多说,直接进入正题. 一.gdb基本命令列表: 命令 解释 简写 file 装入想要调试的可执行文件 无 list 列出产生执行文件源代码的一部分 l next 执行一行源代码但不进入函数内部 n step 执行一行源代码而且进入函数内部 s run 执行当前被调试的程序 r continue 继续执行程序 c quit 终止gdb q print 输出当前指定变量的值 p break 在代码里设置断点 b info break 查看设置断点的信息 ib delete 删

【Linux】GDB调试工具

GDB调试工具 Linux中包含一个很强大的调试工具GDB(GNU Debuger),可以用它来调试C和C++程序. 一. GDB的主要功能有: 设置断点,当程序运行到断点处暂停 显示变量的值,可以打印或者监视某个变量,将变量的值显示出来 单步执行,GDB允许用户单步执行程序,可以跟踪进入函数和从函数中退出 运行时修改变量的值,GDB允许在调试状态下修改变量的值,此功能在测试程序的时候特别有用 路径跟踪,GDB可以将代码的路径打印出来,方便用户跟踪代码 线程切换,在调试多线程的时候,此种功能是必

linux之GDB常用命令汇总

查看gdb的版本号 (1)rpm -q gdb 会显示是否安装gdb及版本号 (2)gdb --version也可以 breakpoint b main; b 20; 设置断点 breakpoint if break 函数名.编号 if xxxx 在xxx的情况下设置的断点才生效 (xxx 例如:变量= 3) cd cd /home/yongchao/ 改变当前工作目录 clear 光标在正要执行的break点的行,然后打clear 删除停止处的断点 info b info b 查看所有的断点

linux之gdb使用

gdb是linux下用来调试的一款软件,在这里,我只记录平常经常会用到的知识点,用到什么,就记录什么,在调试环境中去熟悉调试方法和调试工具,这才会加深理解. gdb能够做什么?它可以按照你的定义,随心所欲控制你的程序,让程序在你所指定的断点处停住,当停住时,你可以检查你程序中所发生的事情,也可以动态的改变程序的执行环境.前期你需要做的准备工作,只需要在编译时,添加-g选项就可以了. b 函数名/行数 b filename:linenum b info   //查看断点信息 delete brea

Linux下gdb调试工具的使用

gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具. gdb主要完成四个方面的功能:(1).启动你的程序,可以按照你的自定义的要求随心所欲的运行程序:(2).可让被调试的程序在你所指定的调试的断点处停住(断点可以是条件表达式):(3).当程序被停住时,可以检查此时你的程序中所发生的事:(4).动态的改变你程序的执行环境. 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<;和>;)和shell通配符(*.?.[.])在

Linux GCC GDB 第二节

之前想验证一些关于堆栈的问题,但是没什么好方法,printf实在局限,流于表面,只间表象(值.范围.规律)不见真身(地址.寄存器.过程),所以想到了gdb--一个强大的调试工具,还能看汇编代码,现在先把这两天学的常用的命令做一个小结,以后有用到的可能再来更新一下: 括号内为全称补全,缩写全称均可用. 例:(e)x(amine)表示既可以用x又可以用examine (gdb)代表gdb环境命令行提示符. 关于缩写,非常类似Linux的shell中的tab功能,但是与shell不同的是有默认选择: