1、设置断点,在源程序第16 行处

(gdb)break 16
Breakpoint 1 at 0x8048496: file tst.c, line 16.

2、设置断点,在函数func()入口处。

(gdb)break func
Breakpoint 2 at 0x8048456: file tst.c, line 5.

3、查看断点信息。

(gdb)info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048496、 in main at tst.c:16
2 breakpoint keep y 0x08048456 in func at tst.c:5

4、

(gdb)run ——————运行程序 r
(gdb)next ——————单条语句执行。 n
(gdb)continue ——————继续运行程序 c

5、查看所有参数

(gdb)in all
info local 查看当前变量

6、打印变量i 的值(gdb)print i p i

$1 = 134513808
(gdb) p g_uiTblmIdSwitchControl
$1 = -1
(gdb) p g_uiTblmLogSwitchControl = 1
$2 = 1
(gdb) p g_uiTblmIdSwitchControl = 74 x
$3 = 74
(gdb) q

7、查看函数堆栈

(gdb)bt
#0 func (n=250) at tst.c:5
#1 0x080484e4 in main () at tst.c:24
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6

8、退出函数

(gdb)finish
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d \n", func(250) );
Value returned is $6 = 31375

9、 退出gdb
(gdb)quit

10、查看内存内容

x /160xb 0x43964d80

该命令的具体语法格式为 x<n/f/u><addr> n、f、u是可选参数。

n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

<addr>表示一个内存地址。
n/f/u三个参数可以一起使用。例如:命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。

输出格式
一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
(gdb) p i
$21 = 101 (gdb) p/a i
$22 = 0x65 (gdb) p/c i
$23 = 101 'e' (gdb) p/f i
$24 = 1.41531145e-43 (gdb) p/x i
$25 = 0x65 (gdb) p/t i
$26 = 110010

11、查看数据结构

p *(struct link_map *)0x7fab515fe000

12、gdb -p 子进程

13、watch *(int*)监控4字节地址 用户态修改

14、如果core文件出现两个线程,如

[New LWP 221856]
[New LWP 217511] t 2
bt
就可以看到第二个线程对应的调用栈,thread apply all where 查看所有线程

15、强制调用函数

使用call或print命令 直接调用函数执行

16、生成内核转存文件

gcore 命令生成core文件 

17、函数短接

gdb下输入:
b LSPIC_LinkAlmPer_InsLinkAlm
commands
return (unsigned int)0
c
end

18、观测点

watch len,可以加观测点,值变化的话会有打印信息,或者告警

19、gdb下需要输入参数

set args prama1 prama2

使用gdb的更多相关文章

  1. linux应用调试技术之GDB和GDBServer

    1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...

  2. 新手如何在gdb中存活

    网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...

  3. GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断

    多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...

  4. GDB调试命令

    1.查看源码: list [函数名][行数] 2.暂停程序 (1)设置断点: a.break + [源代码行号][源代码函数名][内存地址] b.break ... if condition   .. ...

  5. 关于gdb和shp的FID问题

    gdb的FID从1开始,并且FID唯一,从数字化时开始,每个图形对应唯一的FID,删除图形亦删除对应的FID.FID可能出现中断的情况. shp的FID从0开始,并且永远连续.删除图形,则编号在其下面 ...

  6. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  7. gdb 基本知识

    一 单步执行和跟踪函数调用 先给出一段代码,可以用下面介绍的例子. #include <stdio.h> int add_range(int low, int high) { int i, ...

  8. GDB 完全教程

    一.简介 GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一 ...

  9. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  10. gdb可以调试python的pdb么

    1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...

随机推荐

  1. alpakka-kafka(10)-用kafka实现分布式近实时交易

    随着网上购物消费模式热度的不断提高,网上销售平台上各种促销手段也层出不穷,其中"秒购"已经是各种网站普遍流行的促销方式了."秒购"对数据的实效性和精确性要求非常 ...

  2. pypi服务器搭建

    pypi服务器搭建 [root@localhost ~]# hostnamectl set-hostname --static pypi-server [root@pypi-server ~]# yu ...

  3. 面向对象—继承(Day19)

    初识继承 继承是一种创建新类的方式,在python中新类可以继承一个或多个父类,父类又可称为基类或超类,新建的类为派生类或子类.(类与类之间的关系是什么是什么的关系.) 继承语法: class Par ...

  4. Java基于ClassLoder/ InputStream 配合读取配置文件

    阅读java开源框架源码或者自己开发系统时配置文件是一个不能忽略的,在阅读开源代码的过程中尝尝困惑配置文件是如何被读取到内存中的.配置文件本身只是为系统运行提供参数的支持,个人阅读源码时重点不大可能放 ...

  5. 看SparkSql如何支撑企业数仓

    企业级数仓架构设计与选型的时候需要从开发的便利性.生态.解耦程度.性能. 安全这几个纬度思考.本文作者:惊帆 来自于数据平台 EMR 团队 前言 Apache Hive 经过多年的发展,目前基本已经成 ...

  6. Kali网络环境设置

    实验目的 掌握网卡.ssh.apache配置与开启 实验原理 在终端下,修改/etc/network/interfaces网卡文件,启动ssh和apache服务. 实验内容 网卡.ssh.apache ...

  7. Mac欺骗实验

    实验目的 1.掌握MAC欺骗的原理 2.学会利用MacMakeUp软件工具进行伪造源MAC地址的MAC欺骗. 实验内容 使用MacMakeUp伪造主机mac地址,进行mac欺骗实验. 实验环境描述 1 ...

  8. [题解]Codeforces Round #519 - A. Elections

    [题目] A. Elections [描述] Awruk和Elodreip参加选举,n个人投票,每个人有k张票,第i个人投a[i]张票给Elodreip,投k-a[i]张票给Awruk.求最小的k,使 ...

  9. 人工智能进度好慢,呜呜呜 还是先来学python!!!!!!!二十三讲、二十四讲!

    0:十转2 def my_bin(x): a ='' if x : a = my_bin(x//2) return a+str(x%2) else: a+='0b' return a print(my ...

  10. 业务人员可以进行自助ETL操作?这款BI工具你值得拥有

    ​ETL是什么? ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.E ...