首页 > gdb常用调试命令汇总!

gdb常用调试命令汇总!

在debug模式下,使用GDB进行调试,可以使用的命令汇总如下:

(gdb) p *(*pHead)->next   这里声明语句ListNode** pHead,表示查看*pHead执行链表节点的next域的指针 

(gdb) bt full 相比bt能显示更详细的局部变量信息

(gdb) b   hookfactory.cpp:173   在源文件指定行数处加断点

(gdb) b   main.cpp:MURLProc 在源文件指定函数处加断点

(gdb) b   CHttpClient::initialize() 在指定类名的成员函数处加断点

(gdb) l 直接在当前stack frame中查看当前函数的代码,比较直观

(gdb) info b  列出所有断点信息,包括Address,Type,description

(gdb) disa 1 禁用断点

(gdb) info b[1]  列出第一个断点的信息

(gdb) delete all  删除所有断点信息

(gdb) frame 8 or f8 查看第8层栈帧的函数调用,包括其中的局部变量

(gdb) set print elements 0 设置打印完整字符串信息,不然,未打印出的字符串会显示“...”符号

(gdb) p *(CModuleInfo *)gMainConfig.modules[i]  查看复杂的结构体信息

(gdb) p *obj.m_alt  正常显示结构体的信息

(gdb) p info->m_ua_req_hdr.length()  计算函数表达式

  $9 = 342

(gdb) p *this 打印当前对象中各成员的值

(gdb) p this->f  打印出指定成员f的内部信息

(gdb) p *(char *)p 对void*类型的指针p,转换类型后查看它的地址,使用p *p会出错

(gdb) f 打印函数

(gdb) set print pretty on 以整洁的格式显示,而非显示一整行

(gdb) p so 将类或结构体so以排列好的格式打印出来,比如

        $2 = {num = 0,link = {next=0x400530}}

(gdb) set print element 0 完整显示字符串的值,没有省略号...

 

在gdb环境中按快捷键cTRL + X + A,弹出源码窗口,再次按该组合键后恢复原状.

下面是补充:

 

1. 调试core dump文件时,可以用frame查看堆栈的某个位置(当然gdb调试也可以)。这样可以看到其他位置的变量,而不仅仅是出错的那个地方。

2. 自定义函数,譬如我需要频繁的执行c然后bt,可以定义个函数:

 

[plain] view plaincopy

  1. (gdb) define doit  
  2. >c  
  3. >bt  
  4. >end  
  5.   
  6.   
  7. 然后执行这个函数就好了:  
  8. (gdb) doit  
  9. 然后不断回车就可以了。  

3.可以用x查看内存信息,譬如查看128个字节:x /128xb data_ptr,可以看到指针data_ptr的128个字节的内存信息。

Here is an example. If a program says

int *array = (int *) malloc (len * sizeof (int));

you can print the contents of array with

p *array@len

4.gdb里设置临时变量

使用 set 命令。

(gdb) set $i="hello"

(gdb) ptype $i

type = char [6]

(gdb) set $i=1

(gdb) ptype $i

type = int

(gdb) set $i=(char)1

(gdb) ptype $i

type = char

(gdb) set $i=(short)1

(gdb) ptype $i

type = short

更多相关:

  • 使用gdbserver远程调试   1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1下载地址:http://ftp.gnu.org/gnu/gdb/ 注:若已有gdbserver,可以直接跳到步骤4   2.编译gdbserver编译GDB源码时只需...

  • 原来我们可以从官网 http://trafficserver.apache.org/tools/via 获取via头的解码信息来得到指定url的缓存状态信息,现在我们可以直接利用本地工具就可以达到目的。 traffic_via工具能够解码Via头信息,输入的参数要求是[]包含的字符串。 使用方法: 参考...

  • 简介 channel_stats插件能对每个channel收集运行时统计信息(速率,请求数,更多选项将在未来添加),这些统计信息通过http json方式输出,这些 接口代码取自stats_over_http插件。通常,该插件只用于具有*固定*个数的remap规则的反向代理服务器,它并非为那些不限制channel的代理服务器,比如op...

  • logger是一个shell命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息 logger语法: 可以使用的相关命令 -d, --udp 使用数据报(UDP)而不是使用默认的流连接(TCP) -i, --id 逐行记录每一次logger的进程ID -f, --fil...

  • 今天在测试中遇到了一个问题 使用JMeter时请求相关地址参数及方法都填写正确,但是相应数据返回始终不对,例如 查看取样器结果显示 200 正常,但响应数据不符合正常的结果。 经反复检查发现问题如下: 1)没有添加HTTP信息头管理器 (获取根据就近原则) 2)HTTP信息头管理器中填写错误,将Content-Type 填写成了Co...

  • 第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索。上如则是我的log4j的包的版本。好了,用了jar包之后,用来学习的项目结构如下:在对应的路径下创建log4Test.java和log...

  • 草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...

  • 前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...

  • 1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态。1.1.2函数的作用函数是组织好的,可重复使用的,用来...

  • 原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...

  • 在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...