当前位置:   article > 正文

常见GDB调试命令_gdb malloc_stats awk

gdb malloc_stats awk

Pmap 打印命令格式

1、Std::map<int,int> test_map

Pmap test_map in tint

2、class *test_class;

Std::map<int,*test_clss> test_map

Pmap test_map int 即可,

Pmap test_map int *test_class打印好像会有问题

需要安装stl-views脚本,网上下载(ie无法下载),然后放到/root目录下,在gdb调试环境下执行命令source ~/stl-views即可,接下来就可以打印了stl变量了

pvector、plist、pstring

3、b SvrSessionCore.cpp:1515对1515行断掉调试

设置条件断点b 17 if i == 8. 17行设置一个断点,并且只有i==8的时候才会触发.

 

4、b Dahua::Netframwork::CNethandle::unregister

对某个函数进行断掉调试

 

5、r开始运行

 

6、c遇到断点,继续执行

 

7、thread apply all bt 查看所有的线程

 

8、f 4当前堆栈的第四层

 

9、gdb attach pid 进行运行状态的程序进行调试,进入之后执行c,gdb –p pid这种方式进入的好像不需要执行任何命令

 

10、info symbol *0xf5638c70

 

11、p *(Dahua::StreamMedia::CRtpDataSrc*)0xf5638c70

 

12、s(step)进入函数体,类似于windows的F11

 

13、finish退出函数体,类似于windows的F10

 

14、gdb attach pid,然后执行generate-core-file,手动产生core文件

 

15、set print pretty可以将打印信息格式化,这样p this的时候看到的信息更为方便

 

16、x命令查看内存信息

x/100c 0xa61aea00-100查看0xa61aea00地址前面100个字节的字符信息,100c表示查看100个字节的内存信息,c表示按照字符形式打印出来

x/64x addr 表示打印addr地址内存内容

,每次打印64个,16进制形式打印

x/64s 0xf5638c70以字符形式打印64个字符

 

17、x/100x 0xf5638c70以16进制打印100个字符,16、17经常打印前面地址信息,直接在地址前面加减即可,如x/100x 0xf5638c70-100,表示打印前面一个0xf5638c70地址前面100个字节的内容

 

18、set logging file mts.txt设置调试信息日志生成文件名,不这么操作的话,默认gdb.txt

Set logging on开启日志                                        

…//执行命令

Set logging off//关闭日志

 

19、info sharedlibrary查看动态库的调试信息加载情况,如果有*号,表示动态库加载失败?

 

20gdb –p pid进去之后,执行call malloc_trim(0),清缓存

 

21disassemble反汇编

 

22查看当前断点信息info b

delete 删除当前所有的断点

delete 5删除序列号为5的断点,通过上面info b可以知道当前断点信息

disable 5使断点5失效

enable 5使断点5重新生效

23、r开启,

c遇到断点调过之后继续运行

s进入函数内部

finish跳出函数堆栈

24、info args 打印当前函数名和函数参数

info locals打印局部变量信息

25、gdb attach pid进入运行的程序当中,然后执行generate-core-file生成core文件,实际直接执行gcore pid就好了,程序还不会挂掉(kill -6 pid生成core会挂掉)

26、set print elements 0在打印长字符串的时候,gdb默认是打印200个字符,如果字符串超过了200,就会显示…通过这个命令可以设置成打印无限长度的字符串

27、在gdb调试状态下,输入shell之后,可以和linux环境一样,执行各种命令,比如上面的shell pmap pid28、watch

watch <expr>:为表达式(变量)expr设置一个观察点。一旦表达式值有变化时,马上停住程序。

rwatch <expr>:当表达式(变量)expr被读时,停住程序。

awatch <expr>:当表达式(变量)的值被读或被写时,停住程序。

info watchpoints:列出当前所设置了的所有观察点。(csdn博客上有专门的介绍,对于定位踩内存有一定的用处)

29、call +函数名,强制程序执行函数,比如执行call malloc_trim(0),释放应用的缓存空间

30、碰到过一个栈溢出崩溃问题,这种情况下堆栈有20000+栈帧,这种情况下,bt的话,基本无法查看,输入命令bt -20表示方向查看最开始20帧,bt 20顺向查看20帧堆栈

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/288107
推荐阅读
相关标签
  

闽ICP备14008679号