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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值