gdb调试linux命令,linux使用gdb调试

linux gdb基础命令

你的gdb压根就没有解析出来断点,你的库有问题。你run后bt一下就可以进入断点的

网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;成都做网站、网站制作收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了10多年的创新互联公司网站建设公司。

你把代码发我吧,给你调试

linux中 怎么使用gdb调试程序

gdb是用来调试二进制程序的,不能调试python脚本。 python自带pdb模块,可以用来调试自己的脚本。 使用python -m pdb ,交互方式,命令与gdb类似。

Break的Linux下GDB调试

作用:设置断点(BreakPoint)

我们使用break命令来设置断点,break在进入指定函数时停住。C++中能使用class::function或function(type,type)格式来指定函数名。

break

在指定行号停住。

break +offset

break -offset

在当前行号的前面或后面的offset行停住。offiset为自然数。

break filename:linenum

在源文件filename的linenum行处停住。

break filename:function

在源文件filename的function函数的入口处停住。

break *address

在程式运行的内存地址处停住。

break

break命令没有参数时,表示在下一条指令处停住。

break…if

…能是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,能设置break if i=100,表示当i为100时停住程式。

查看断点时,可使用info命令,如下所示:(注:n表示断点号)

info breakpoints [n]

info break [n]

linux中怎么使用gdb调试进程有dettach

在2.5.60版Linux内核及以后,GDB对使用fork/vfork创建子进程的程序提供了follow-fork-mode选项来支持多进程调试。follow-fork-mode的用法为:set follow-fork-mode [parentchild]parent: fork之后继续调试父进程,子进程不受影响。 child: fork之后调试子进程,父进程不受影响。 因此如果需要调试子进程,在启动gdb后:(gdb) set follow-fork-mode child并在子进程代码设置断点。此外还有detach-on-fork参数,指示GDB在fork之后是否断开(detach)某个进程的调试,或者都交由GDB控制:set detach-on-fork [onoff]on: 断开调试follow-fork-mode指定的进程。 off: gdb将控制父进程和子进程。follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。 注意,最好使用GDB 6.6或以上版本,如果你使用的是GDB6.4,就只有follow-fork-mode模式。follow-fork-mode/detach-on-fork的使用还是比较简单的,但由于其系统内核/gdb版本限制,我们只能在符合要求的系统上才能使用。而且,由于follow-fork-mode的调试必然是从父进程开始的,对于fork多次,以至于出现孙进程或曾孙进程的系统,例如上图3进程系统,调试起来并不方便。Attach子进程 众所周知,GDB有附着(attach)到正在运行的进程的功能,即attach pid命令。因此我们可以利用该命令attach到子进程然后进行调试。例如我们要调试某个进程RIM_Oracle_Agent.9i,首先得到该进程的pid[root@tivf09 tianq]# ps -efgrep RIM_Oracle_Agent.9i nobody 6722 6721 0 05:57 ? 00:00:00 RIM_Oracle_Agent.9i root 7541 27816 0 06:10 pts/3 00:00:00 grep -i rim_oracle_agent.9i通过pstree可以看到,这是一个三进程系统,oserv是RIM_Oracle_prog的父进程,RIM_Oracle_prog又是RIM_Oracle_Agent.9i的父进程。[root@tivf09 root]# pstree -H 6722通过 pstree 察看进程启动GDB,attach到该进程用 GDB 连接进程现在就可以调试了。一个新的问题是,子进程一直在运行,attach上去后都不知道运行到哪里了。有没有办法解决呢?一个办法是,在要调试的子进程初始代码中,比如main函数开始处,加入一段特殊代码,使子进程在某个条件成立时便循环睡眠等待,attach到进程后在该代码段后设上断点,再把成立的条件取消,使代码可以继续执行下去。至于这段代码所采用的条件,看你的偏好了。比如我们可以检查一个指定的环境变量的值,或者检查一个特定的文件存不存在。以文件为例,其形式可以如下:void debug_wait(char *tag_file) { while(1) { if (tag_file存在) 睡眠一段时间; else break; } }当attach到进程后,在该段代码之后设上断点,再把该文件删除就OK了。当然你也可以采用其他的条件或形式,只要这个条件可以设置/检测即可。Attach进程方法还是很方便的,它能够应付各种各样复杂的进程系统,比如孙子/曾孙进程,比如守护进程(daemon process),唯一需要的就是加入一小段代码。GDB wrapper 很多时候,父进程 fork 出子进程,子进程会紧接着调用 exec族函数来执行新的代码。对于这种情况,我们也可以使用gdb wrapper 方法。它的优点是不用添加额外代码。其基本原理是以gdb调用待执行代码作为一个新的整体来被exec函数执行,使得待执行代码始终处于gdb的控制中,这样我们自然能够调试该子进程代码。还是上面那个例子,RIM_Oracle_prog fork出子进程后将紧接着执行RIM_Oracle_Agent.9i的二进制代码文件。我们将该文件重命名为RIM_Oracle_Agent.9i.binary,并新建一个名为RIM_Oracle_Agent.9i的shell脚本文件,其内容如下:[root@tivf09 bin]# mv RIM_Oracle_Agent.9i RIM_Oracle_Agent.9i.binary [root@tivf09 bin]# cat RIM_Oracle_Agent.9i #!/bin/sh gdb RIM_Oracle_Agent.binary当fork的子进程执行名为RIM_Oracle_Agent.9i的文件时,gdb会被首先启动,使得要调试的代码处于gdb控制之下。

[Linux]gdb查看内存区命令

GNU调试器(GNU Debugger, GDB)是一个开源的源代码级的调试工具,其性能优良、功能齐全、易于使用,在嵌入式系统开发过程中扮演着越来越重要的角色。接下来是我为大家收集的[Linux]gdb查看内存区命令,希望能帮到大家。

[Linux]gdb查看内存区命令

用gdb查看内存

格式: x /nfu

说明

x 是 examine 的缩写

n表示要显示的内存单元的个数

f表示显示方式, 可取如下值

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

i 指令地址格式

c 按字符格式显示变量。

f 按浮点数格式显示变量。

u表示一个地址单元的长度

b表示单字节,

h表示双字节,

w表示四字节,

g表示八字节

Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),

t(binary), f(float), a(address), i(instruction), c(char) and s(string).

Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes)

举例

x/3uh buf

表示从内存地址buf读取内容,

h表示以双字节为一个单位,

3表示三个单位,

u表示按十六进制显示

例子:

n是个局部变量

Breakpoint 1, main (argc=1, argv=0xbffff3a4) at calc.c:7

7 int n = atoi(argv[1]);

(gdb) print n

$1 = (int *) 0xbffff2ec

(gdb) x 0xbffff2ec

0xbffff2ec: 0x00282ff4

(gdb) print * (int *) 0xbffff2ec

$2 = 2633716

(gdb) x /4xw 0xbffff2ec

0xbffff2ec: 0x00282ff4 0x080484e0 0x00000000 0xbffff378

(gdb) x /4dw 0xbffff2ec

0xbffff2ec: 2633716 134513888 0 -1073745032

(gdb)

看了“[Linux]gdb查看内存区命令”还想看:

1. Linux使用dmidecode命令查看内存型号

2. Linux下查看CPU型号,内存大小,硬盘空间命令

3. 如何在Linux命令行中查看目录的大小

4. LINUX 查看硬件配置命令的教程

使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

gdb是GNU开源组织发布的一个强大的Linux程序调试工具,比图形化的调试工具更强大,主要来调试C/C++语言程序。

Debug 版本的可执行程序包含调试信息,用于程序员调试程序。

Release 版本的可执行程序往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以方便用户使用。

用gcc/g++编译时,要加上-g选项生成debug版本的可执行程序,否则就无法使用gdb调试了。

r 表示开始run, 如果在运行的过程中发生了错误,比如segmentation fault,可以查看此时的出错源代码:

通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、文件名+行号以及偏移量、地址等进行设置。

比如在function Peer_auto_save上设置断点,在peer.c的第136行设置断点:

从断点处继续运行

退出gdb

网页名称:gdb调试linux命令,linux使用gdb调试
文章起源:https://www.cdcxhl.com/article46/heopeg.html

成都网站建设公司_创新互联,为您提供域名注册企业网站制作全网营销推广面包屑导航商城网站定制网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计